检查条目是否作为事实存在



只是想知道为什么这个简单的代码不能按预期工作:

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是上面定义的。

最新更新