簡體   English   中英

Prolog相互遞歸

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM