只是想知道为什么这个简单的代码不能按预期工作:
validAlloc(Reg, Reg, Reg, Reg, Reg) :- register(Reg).
基本上,我想检查一下,如果用户输入validAlloc(1,2,3,4,5(,这些数字是否存在于寄存器中。我的问题是,只有当每个数字都相同时,它才有效。但我希望用户能够输入不同数字的组合。
感谢您的帮助
以上不起作用的原因是当您编写规则时
validAlloc(Reg, Reg, Reg, Reg, Reg)
prolog假定所有五个参数都是相同的(因为它们都命名为Reg(。
一个简单的答案是:
validAlloc(Reg, Reg1, Reg2, Reg3, Reg4) :-
register(Reg),register(Reg1),register(Reg2),register(Reg3),register(Reg4).
另一个更优雅的解决方案是:
validAlloc2([]).
validAlloc2([H|T]) :- register(H),validAlloc2(T).
在上面的列表中,您提供了(五个(元素的列表,而不是五个数字。
如果你需要像以前一样工作,你可以简单地写:
validAlloc(Reg, Reg1, Reg2, Reg3, Reg4):-
validAlloc2([Reg, Reg1, Reg2, Reg3, Reg4]).
其中CCD_ 1是上面定义的。