我正在写prolog代码,发现一定数量;如果数字介于0到9之间并且不在给定列表中,则数字是正确的数字。要做到这一点,我写了一个谓语number/3
有可能的数字作为第一个参数,其中Rightnumber不能出现在列表和神秘RightNumber作为第三个参数:如何改进查找列表中特定数字的代码?
number([XH|XT], [H|T], RightNumber):-
member(XH, [H|T]), !,
number(XT, [H|T], RightNumber).
number([XH|_], [H|T], XH):-
\+ member(XH, [H|T]).
所以这段代码基本上是说,如果可能的数字列表的头已经是第二个列表的成员,切割头部并继续与尾部递归。 如果元素不在第二个列表中,则第二个子句触发并告诉序言该数字是RightNumber。没关系,它只给出了可能的第一个数字,这就是我想要使用的数字。
这段代码在理论上有效,但我想知道是否有更好的方法来写下它?我在我的代码中稍后在另一个谓词中使用了这个谓词,它不作为其中的一部分工作。我认为它只是读取第一个条款,而不是第二个条款,因此失败。
有没有人有一个想法,可能会改善我的代码?
查询示例:
?- number([0,1,2,3,4,5,6,7,8,9], [1,2], X).
X = 3
?- number([0,1,2,3,4,5,6,7,8,9], [1,2,3,4,5,6,7,8,0], X).
X = 9