Prolog将变量附加到列表中

时间:2012-03-06 03:43:42

标签: list prolog append

我想在列表中附加一个变量N,它绑定到一个数字。

N = 1.

append([N], [2,3,4], Z).

Z = [N,2,3,4]. //Wrong output!

我想获得Z = [1,2,3,4]

如何附加变量的数字部分,而不是实际变量本身?

2 个答案:

答案 0 :(得分:6)

我担心Prolog没有你习惯的变量赋值,只是变量绑定。所以“陈述”

N = 1.
append([N], [2,3,4], Z).

实际上构成了两个完全不相关的查询。幸运的是,通过组合您的查询可以实现您想要的效果:

N = 1, append([N], [2,3,4], Z).

如果您确实需要全局变量,则可以始终使用事实或asserta/1动态定义。

另请注意:将来,您可能希望确保在处理数字时使用is代替=

答案 1 :(得分:2)

你正在使用哪种Prolog?我所知道的所有Prolog,将首先为N = 1产生答案。这应该表明,Prolog首先使用N = 1回答了N = 1查询,这看起来有点奇怪。例如,这是GNU:

| ?- N = 1.

N = 1

yes
| ?- 
append([N], [2,3,4], Z).

Z = [N,2,3,4]

yes