有没有办法在序言中编写非同质列表?
我想创建一个包含符号和整数的列表。就像是:
[A 2 3 B C D E]
谢谢
PS I 用户 Turbo Prolog 2.0
Turbo Prolog 要求列表元素为单一类型。但是有一种方法可以解决这个问题 - 您只需要定义一个可以表示整数和符号的单一类型。您可以通过定义一个复合域来做到这一点,其中每种不同的类型都用不同的函子包装。因此,例如:
mixed_type = i(integer); s(symbol).
mixed_list = mixed_type*.
缺点是每个列表元素都需要一个仿函数,这有点尴尬:
[s(a), i(2), i(3), s(b), s(c)]
Prolog 只有一种数据类型,因此每个列表都是同质的。
Prolog 中的每个元素都只是一个术语。a
是一个术语,a(x,y)
是一个术语,3
是一个术语,语言中没有任何东西可以区分它们。当然,许多内置谓词根据类型进行区分——你不能指望得到答案X is 1 + a
——但语言本身没有区别。
因此,要回答您的问题,您可以在列表中添加任何您想要的内容,包括以上所有内容 - 以下是有效的 Prolog:
L = [a, a(x,y), 3, X is 1 + a].
是的,Prolog 中没有类型。你必须用引号写大写字母:['A', 2, 3, 'B', 'C' 'D', 'E', f, g]