我想追加到一个变量,N,这是绑定到一个数字的列表。序言追加变量列表
N = 1.
append([N], [2,3,4], Z).
Z = [N,2,3,4]. //Wrong output!
我想Z = [1,2,3,4]
如何追加一个变量,而不是实际的变量本身的数量一部分?
我想追加到一个变量,N,这是绑定到一个数字的列表。序言追加变量列表
N = 1.
append([N], [2,3,4], Z).
Z = [N,2,3,4]. //Wrong output!
我想Z = [1,2,3,4]
如何追加一个变量,而不是实际的变量本身的数量一部分?
恐怕Prolog没有像你习惯的变量赋值,只是变量绑定。因此, “声明”
N = 1.
append([N], [2,3,4], Z).
实际上构成两个完全不相关的查询。幸运的是,你想要的效果可以通过结合你的查询来实现:
N = 1, append([N], [2,3,4], Z).
如果你真的需要一个全局变量,你总是可以使用一个事实或asserta/1
动态定义之一。
另请注意:未来,您可能需要确保在处理数字时使用is
而不是=
。
您正在使用哪个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
魔鬼的细节。 “” vs“,”所有的区别。 – CyberShot 2012-03-06 04:09:41
@ daniel-lyons:使用'is'慢于'=',因为右边被评估,即使它只是一个简单的数字。显然,这可能取决于特定的Prolog系统,效果很小,但对于原始速度,使用统一。 – twinterer 2012-03-06 12:22:56
@twinterer我对'is'的评论与那些输入'N = 1 + Y'的初学者通常希望添加发生的事实有关。 :) – 2012-03-06 16:23:06