[英]Prolog Mutual recursion
好的,我正在編寫一些代碼,以通過Prolog中的相互遞歸檢查每個值。 到目前為止,這是我的代碼:
semestersok(SP) :-
[Prior|Tail] = SP,
sem1ok(SP).
%% sem1ok(SP) :- checks semester 1 of SP is ok
sem1ok(SP) :-
[Sem1|Tail] = SP,
sem2ok(Tail).
%% sem2ok(SP) :-
sem2ok(SP) :-
[Sem2|Tail] = SP,
sem1ok(Tail).
我還沒有放入任何代碼來進行檢查(有兩個關系,因為它必須檢查交替值),代碼循環出現問題,直到它有一個空列表,然后它失敗並返回錯誤(否)。 由於此代碼未處理任何代碼,因此我認為它應該恢復原狀。 為什么不呢
對於空列表,您需要一些規則。 添加:
sem1ok([]).
sem2ok([]).
另外,如果您這樣編寫代碼,代碼可能會更直觀(因為匹配空列表的規則與匹配非空列表的規則之間的區別更加清楚):
% Rules for sem1ok/1
sem1ok([]).
sem1ok([Sem1|Tail]):-
ok(Sem1), % Something involving Sem1
sem2ok(Tail).
% Rules for sem2ok/1
sem2ok([]).
sem2ok([Sem2|Tail]):-
ok(Sem2), % Something involving Sem2
sem1ok(Tail).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.