プロローグに不均一なリストを書く方法はありますか?
記号と整数を含むリストを作成したい。何かのようなもの:
[A 2 3 B C D E]
ありがとう
PSIユーザーTurboProlog2.0
プロローグに不均一なリストを書く方法はありますか?
記号と整数を含むリストを作成したい。何かのようなもの:
[A 2 3 B C D E]
ありがとう
PSIユーザーTurboProlog2.0
Prologには1つのデータ型しかないため、すべてのリストは同種です。
Prologのすべての要素は単なる用語です。a
は用語でa(x,y)
あり、用語で3
あり、用語であり、それらを区別する言語には何もありません。もちろん、多くの組み込み述語はタイプに基づいて区別します-答えを期待することはできませんX is 1 + a
-しかし、言語自体に区別はありません。
したがって、あなたの質問に答えるために、あなたはあなたのリストにあなたが望むものを絶対に入れることができます、上記のすべてを含みます-以下は有効なPrologです:
L = [a, a(x,y), 3, X is 1 + a].
Turbo Prologでは、リスト要素が単一のタイプである必要があります。しかし、これを回避する方法があります。整数と記号の両方を表すことができる単一の型を定義する必要があります。これを行うには、複合ドメインを定義します。このドメインでは、それぞれの異なるタイプが異なるファンクターでラップされます。したがって、たとえば:
mixed_type = i(integer); s(symbol).
mixed_list = mixed_type*.
欠点は、すべてのリスト要素の周りにファンクターが必要なことです。これは少し厄介です。
[s(a), i(2), i(3), s(b), s(c)]
はい、Prologにはタイプはありません。大文字は引用符で囲む必要があります:['A'、2、3、'B'、'C''D'、'E'、f、g]