我正在寫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