单词是由空格或字符串的开始/结束点分隔的任何符号字符。例如。 [w,o,r,d,1,' ',w,o,r,d,2]
.
我需要找到给定字符串的所有 k 长度单词并将它们附加到结果字符串中(用空格分隔)。
这就是我所期望的,例如在 k = 5 的情况下:
?- kthWords([w,o,r,d,1,'',w,r,d,'',w,o,r,d,2], 5, X).
X = [w,o,r,d,1,'',w,o,r,d,2].
最佳答案
你可以写:
final_kthWords(L,K,Outlist):-
kthWords(L,K,L1),
reverse(L1,[_|T]),
reverse(T,Outlist).
kthWords([],_,[]):-!.
kthWords(L,K,L1):-
find_word(L,Word,L2),
length(Word,N),
(N=:=K-> append(Word,[' '|T],L1),kthWords(L2,K,T);
kthWords(L2,K,L1)).
find_word([],[],[]).
find_word([H|T],[H|T1],L):-dif(H,' '),find_word(T,T1,L).
find_word([H|T],[],T):- H = ' '.
哪里
kthWords/3
电话find_word/2
找到单词,最后 kthWords
返回输出列表,但它添加了一个 ' '
到底。唯一的事情final_kthWords(L,K,Outlist)/3
确实是删除多余的 ' '
在列表的末尾并返回正确的列表:?- final_kthWords([w,o,r,d,1,' ',w,r,d,' ',w,o,r,d,2], 5, X).
X = [w, o, r, d, 1, ' ', w, o, r, d, 2] ;
false.
关于string - 检测prolog中字符串的所有k个长度的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206023/