kprolog K-Prolog Compiler Version 6.0

項の定義

のいずれかの形をとり、次に分類する5種類の文字から構成されます。
K-Prologでは項を
小文字
  • 1バイト a b c ... z と $ ($はユーザプログラムでは使いません)
  • 2バイトコードのうち、大文字、数字、特殊文字に対応しないもの
大文字
  • 1バイト A B C ... Z と _
  • 2バイト A B C ... Z と _
数字
  • 1バイト 0 1 2 ... 9
  • 2バイト 0 1 2 ... 9
特殊文字
  • 1バイト + - * / ^ < > = ~ : . ? @ # & \
  • 2バイト + - * / ^ < > = ~ : . ? @ # & \
分離文字
  • 1バイト ! [ ] , | ( ) ' " { } .
  • 2バイト ! [ ] , | ( ) ' " { } .
2バイト文字から1バイト文字への変換の指定は、 組込み述語char_conversion/2で追加できます。

空白文字(ブランクやタブ、改行コードなどの非印字文字)は引用アトムおよ び文字列の場合を除いて多くの場合無視されます。 複合項の構文とフル・ストップ ("."とそれに続く空白文字)の場合にのみ意味を持ちます。


定数

定数はアトムと整数と浮動小数点数です。


アトム

アトムは、名前をあらわす記号であり、 の3種類があります。(この3種類はアトムとしての意味に違いがあるわけでは ありませんが、複合項関数子名として使う場合に構文上の微妙な差異があり ます)
引用アトムの場合はそのアトムを構成する文字の 漢字からASCII文字への変換は行なわれません。また、 \エスケープが文字列と同様に使えます。 なお、アトムの文字の並びとしての最大の長さは1023字です。
[例]  アトム
   prolog   …   通常アトム
   言語     …   漢字もアトムになります
   ':a:'    …    引用アトム
   '\''     …    引用アトムの中の引用符は\でエスケープできます
   ''''     …    連続する引用符は一個の引用符です。
   :-       …    記号アトム


整数

整数は、数字のみから成る数(つまり10進数)、 2進数 0bXXXX、8進数 0oXXX、16進数 0xXXXX、またはn進記法 n'XXX の形のものと それに負号"-"をつけたものです。 n として 2,3,4, ... 9,A,B, ... X,Y,Z が使えます。

入力できる整数の範囲は10進数の場合は1023桁ですが、 2進数、8進数、16進数、またはn進記法で記述した場合は 32ビットで表現される値です。

また、0'X の形式は、X のところに記述した文字の内部コードを 表す整数と解釈されます。

[例]  整数
   123      …    整数
   -12      …    負号のついた整数
   0o777    …    8進数
   0xffff   …    16進数
   0'T     …    "T"の文字コード
   z'yy     …    35進数


浮動小数点数

浮動小数点数は、 の形の数です。
整数部、小数部、指数部はそれぞれ数字のみから成ります。 小数部は省略してもかまいません。 使用できる浮動小数点数の範囲はシステムの C言語の double型と同じです。
[例]  浮動小数点数
   1.23     …    指数部のない浮動小数点数
   1.23e8   …    指数部付きの浮動小数点数


変数

変数は大文字または下線 _ で始まり小文字または大文字または数字を続けたものです。
変数は、任意の項と単一化できる項です。 単一化とは、変数への値の代入と考えてここでは差し支えありません。 変数と変数を単一化すると、2つの変数は同じものになります。

下線のみから成る変数 _ を無名変数といいます。 無名変数は、その出現ごとに異なった変数とみなすことになっているので、 項全体の中で1回しかあらわれない変数を記述するのに便利です。

[例] 変数

   Variable
   _変数
   _
変数の有効範囲は、1つの項の中に限られます。 従って、同じつづりからなる変数でも、全く別の項の中にあらわれる場合には、 異なる変数となります。


複合項

複合項は、通常アトムまたは引用アトムの後に 空白文字を置かずに左カッコと右カッコで囲んだ引数並びが続いたものです。

先頭のアトムの部分を関数子名または複合項の名前といいます。
引数並びは、引数である項を , で区切って並べたものです。 この引数の個数をアリティといいます。

[例] 複合項

   compound(x,y)
   f(f(x))
   father(ikeda,sato)
引数が1個または2個の複合項は 演算子機能によって前置、 中置、または後置記法で書けます。 ここでは算術式の 1+2*3 が演算子機能により
     複合項 '+'(1,'*'(2,3))
と解釈されていることを知っておいてください。
[例] 複合項

   :-p(x)    は    ':-'(p(x))
   p(x):-q(x),r(x)    は    ':-'(p(x),','(q(x),r(x)))
上の例で ","が演算子として解釈される場合があることがわかります。 この ","は引数並びの区切り記号の","とは区別されているので、注意が必 要です。


複合項の一種として、リストと呼ばれる記法があります。 リストは、リストの要素である項を","で句切った並び を"["と"]"で囲った形をしていますが、内部では"."を関数子名とする アリティ2の複合項と等価です。
[例] リスト
   [a]    は    '.'(a,[]) すなわち a.[]
   [a,f(x)]    は    '.'(a,'.'(f(x),[])) すなわち a.f(x).[]
上の例で出てきた"[]"はニルと読み、リストの終端を表す特別なアトムです。 []は特に、空の(要素が1つもない)リストと考えます。 終端が[]ではないリストは"|"を使って次のように表します。
[例] リスト中の |
   [a,b|X]    は    a.b.X
   [a|[b,c]]    は    a.b.c.[]
特に、下の例が [a,b,c] と同じであることに注意してください。


リストの一種に文字列と呼ばれる記法があります。 文字列は、任意の文字の並びを二重引用符 " で囲ったものです。 文字列は、各文字の漢字コードをリストにしたもので表現しています。
文字列中で、\エスケープとして それぞれ表します。 また、\の直後に改行を書くと行継続記号となります。
[例] 文字列

   ""    は [] と同じ
   "ABC"    は [65,66,67]
   "\t"    は [9]
   "\""    \で二重引用符をエスケープできます  
   """"    連続する二重引用符は一個の二重引用符です。
   "\xff21\xff22"    は [65313,65314] (unicode double width "AB")
   "abc\
   de"    は "abcde"と同じ


複合項の特殊な記法として、中かっこがあります。 中かっこ"{"と"}"を使って、{x,f(y)}のように 項の列を1つにまとめることができます。 {}記法では、複合項の関数子名はアトム'{}'で、アリティは1です。 特別な場合として、{}はアトムとなります。
[例] 中かっこ
   {x,f(y)}    は    '{}'((x,f(y)))


注釈

Prolog言語には、2種類の注釈の記法があります。 は、注釈として、プログラムや項を読み取るときに無視されます。 注釈は、項または分離記号の前後に書けます。


まとめ

Prolog言語の項は次のように分類されます。
定数アトム
整数
浮動小数点数
変数普通の変数
無名変数
複合項普通の複合項
前置、中置または後置表記された複合項
中かっこ記法の複合項
リスト普通のリスト
文字列


一つ上に戻る 目次に戻る