我剛剛開始學習Prolog的,我發現一些代碼,我也很難理解:序言 - 新來的Prolog,有一個很難理解一個代碼塊
stringCounter([],0,0).
stringCounter([H|[]],1,1) :- char_type(H, alpha),!.
stringCounter([H1,H2|T],CCount,WCount):-
char_type(H1, alpha),
\+char_type(H2,alpha),
!,
stringCounter(T,L0,A0),
CCount is L0+1, WCount is A0+1.
stringCounter([H|T],CCount,WCount):-
char_type(H, alpha),
!,
stringCounter(T,L1,A1),
CCount is L1+1, WCount is A1+0.
stringCounter([_|T],CCount,WCount):- !, stringCounter(T,CCount,WCount).
的功能任務是計算字符串中有多少個字符,以及有多少個字符(據我瞭解)。
我瞭解的大多數代碼在這裏除了3件小事:
如何
CCount is L0+1, WCount is A0+1
等有效的語法?L0
和A0
是完全未定義的。 Prolog如何知道例如A0+1
是什麼?不應該是A0 is WCount + 1
?我不明白
stringCounter([H|[]],1,1) :- char_type(H, alpha),!.
和stringCounter([_|T],CCount,WCount):- !, stringCounter(T,CCount,WCount).
的目的是什麼。爲什麼如果我將
stringCounter([_|T],CCount,WCount):- !, stringCounter(T,CCount,WCount).
從底部(向上)移開,函數的結果會發生變化?我嘗試過,並且在移動該行後得到了完全不同的結果。
對不起,基本的/愚蠢的問題,但我真的很難包裝我的頭圍繞Prolog和邏輯編程。