我想在列表中附加一个变量N,它绑定到一个数字。
N = 1.
append([N], [2,3,4], Z).
Z = [N,2,3,4]. //Wrong output!
我想获得Z = [1,2,3,4]
如何附加变量的数字部分,而不是实际变量本身?
答案 0 :(得分:6)
我担心Prolog没有你习惯的变量赋值,只是变量绑定。所以“陈述”
N = 1.
append([N], [2,3,4], Z).
实际上构成了两个完全不相关的查询。幸运的是,通过组合您的查询可以实现您想要的效果:
N = 1, append([N], [2,3,4], Z).
如果您确实需要全局变量,则可以始终使用事实或asserta/1
动态定义。
另请注意:将来,您可能希望确保在处理数字时使用is
代替=
。
答案 1 :(得分:2)
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