有没有办法在prolog中编写非同质列表?
我想创建一个包含符号和整数的列表。就像是:
的 [A 2 3 B C D E]
由于
P.S。我使用Turbo Prolog 2.0
答案 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]