Prolog非同质列表

时间:2012-11-21 10:16:10

标签: prolog

有没有办法在prolog中编写非同质列表?
我想创建一个包含符号和整数的列表。就像是: 的 [A 2 3 B C D E]

由于

P.S。我使用Turbo Prolog 2.0

3 个答案:

答案 0 :(得分:2)

Prolog只有一种数据类型,因此每个列表都是同质的。

Prolog中的每个元素都只是一个术语a是一个术语,a(x,y)是一个术语,3是一个术语,并且语言中没有任何内容可以区分它们。当然,很多内置谓词都会根据类型进行区分 - 你不能指望来自X is 1 + a的答案 - 但语言本身没有区别。

所以要回答你的问题,你可以把你想要的任何东西放在你的清单中,包括以上所有 - 以下是有效的Prolog:

L = [a, a(x,y), 3, X is 1 + a].

答案 1 :(得分:2)

Turbo Prolog要求列表元素属于单一类型。 但是有一种解决方法 - 你只需要定义一个可以表示整数和符号的单一类型。您可以通过定义复合域来完成此操作,其中每个不同的类型都包含不同的仿函数。所以,例如:

mixed_type = i(integer); s(symbol).
mixed_list = mixed_type*.

缺点是你需要一个围绕每个列表元素的仿函数,这有点尴尬:

[s(a), i(2), i(3), s(b), s(c)]

答案 2 :(得分:1)

是的,Prolog中没有类型。你必须用引号写大写字母: ['A',2,3,'B','C''D','E',f,g]