0
最後のスペースバーの前の要素の数を数えたいと思います。 たとえば、リスト[a,b,_,_,f,g,h,_,_,_]
があり、最終結果は X=3
となります。あなたのコード内のさまざまな問題がある最後のスペースバーの前の要素をカウントします
?- count([a,b,' ',' ',f,g,h,' ',' ',' '],N).
N = 3
:
last_word(String, Word) :-
last_word(String, [], Word).
last_word([], Word, Word) :- !.
last_word([' '|TailString], _, Word) :-
!, last_word(TailString, [], Word).
last_word([Char|TailString], Buff, Word) :-
last_word(TailString, [Char|Buff], Word).
dellast([_],[]) :- !.
dellast([X|T],[X|Y]) :- dellast(T,Y).
num([],0).
num([_|L],N) :- num(L,N1),N is N1+1.
count(L,N) :-
last(L,Elem),
Elem=' ',
dellast(L,D),
last_word(D,W),
num(W,N), !.
count(L,N) :-
last_word(L,W),
num(W,N), !.
「_」は「スペースバー」ではありません。それらは匿名の変数であり、プロローグ用語が変数であるかどうかにかかわらず統一されます。 – lurker
彼らはスペース文字ではなく、アンダースコアであると考えています。 –
@トーマスこの時点では完全に投機的です。 – lurker