3

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

谢谢

PS I 用户 Turbo Prolog 2.0

4

3 回答 3

2

Turbo Prolog 要求列表元素为单一类型。但是有一种方法可以解决这个问题 - 您只需要定义一个可以表示整数和符号的单一类型。您可以通过定义一个复合域来做到这一点,其中每种不同的类型都用不同的函子包装。因此,例如:

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

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

[s(a), i(2), i(3), s(b), s(c)]
于 2012-11-21T12:14:25.880 回答
2

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

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

因此,要回答您的问题,您可以在列表中添加任何您想要的内容,包括以上所有内容 - 以下是有效的 Prolog:

L = [a, a(x,y), 3, X is 1 + a].
于 2012-11-21T10:58:14.520 回答
1

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

于 2012-11-21T10:48:55.750 回答