Если еще надо, то вот вариант решения на SWI
| Код | get_space(Space) :- [Space] = " ".
num_words("", 0) :-!.
num_words(S, 1) :- get_space(Space), \+ member(Space, S), !. num_words(S, N) :- get_space(Space), append(A, [Space | S1], S), \+ member(Space, A), num_words(S1, N1), N is N1+1.
|
Использование
| Код | [debug] 49 ?- num_words("", N).
N = 0 ;
No [debug] 50 ?- num_words("abc", N).
N = 1 ;
No [debug] 51 ?- num_words("abc def dh kkk", N).
N = 4 ;
No
|
Единственное, тут не учтено что пробелов между словами может быть больше чем 1, а так же что в начале и конце предложения могут быть пробелы. В таком случае, они будут "увеличивать" число слов. Если надо учесть этот случай, то надо усовершенствовать программу. |