- 著者
-
山崎 憲一
吉田 雅治
天海良治
竹内 郁雄
- 出版者
- 一般社団法人情報処理学会
- 雑誌
- 情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
- 巻号頁・発行日
- vol.42, no.7, pp.70-83, 2001-07-15
Lispに論理型言語の機能を融合する場合には,論理型言語特有の内部データ構造である未定義値(UNDEF)と,参照(REF)をどのように表現するかということが問題となる.本論文では,我々がTAO86およびTAOという2つの言語で採ったアプローチについて述べる.UNDEFには,必然的に構造データ中の「番地」という概念がともなうが,これをLispからどのように隠蔽するかがポイントとなる.TAO86では,UNDEFを即値とし,REFを処理系が自動的にたどる方法によって実装を行った.これにより言語が単純なものとなるが,いくつかのケースにおいては特有の問題を生じる.たとえば,REFやUNDEFを含む構造データの同一性を判定するために,アドホックな関数を必要とする.TAOでは同様の方法を採りつつも,論理変数を述語の値として返す関数型の機能,パターンマッチによる同一性の判定の機能などを用いて,これらの問題を解決する.また,本論文ではTAOのタグ割当てなど,実装の詳細についても述べる.Lisp can have much expressive power by incorporating logic-programming facilities. In this paper, we discuss implementation issues of this incorporation, especially for internal data representation such as undefined value (`UNDEF') and reference (`REF'). We designed two Lisp-based multi-paradigm programming languages, TAO86 and TAO, to solve these issues. In TAO86, UNDEF is a first-class immediate value, and REF is dereferenced by the system automatically. This solution is quite simple but did not have enough power to handle the whole set of data so that TAO86 provides some adhoc builtin functions. TAO, a thoroughly redesigned successor of TAO86, has new features such as functional predicates and pattern-matching mechanism that give an elegant solution of TAO86 issues. This paper also describes the implementation of internal data representation and data handling mechanisms in detail.