string - 检测prolog中字符串的所有k个长度的单词

标签 string recursion prolog

单词是由空格或字符串的开始/结束点分隔的任何符号字符。例如。 [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/

相关文章:

r - 从向量 R 创建所有可能的字符串

c - findAndReplace函数的实现

Java org.w3c.dom - 递归查找并返回 NodeList 中的属性值

java - 字符串的递归扩展

Prolog - 参数未充分实例化

Prolog - 参数没有充分实例化 - 骑士/棋盘

list - 这个程序的声明性解释说明一个元素是否属于一个列表

java - Java中的巨大字符串表

php - 从 PHP 数组中提取字符串

bash - 对多种文件类型使用 `find` 并替换找到的文件中的字符串