我刚刚开始学习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和逻辑编程。