我有一个字符串列表。有时一个字符串可以包含一个特定的符号。例如,如果我有这个列表:
L=[dog,cat,tiger,,bear]
该字符串"tiger,"
与","
单词连接。我该怎么做才能删除","
from "tiger,"
?
我有一个字符串列表。有时一个字符串可以包含一个特定的符号。例如,如果我有这个列表:
L=[dog,cat,tiger,,bear]
该字符串"tiger,"
与","
单词连接。我该怎么做才能删除","
from "tiger,"
?
下面的谓词, 将“修复” yieldingfix_words(+WordsIn, -WordsOut)
中的单词(术语)。“修复”意味着单词中不属于的任何字符都将被删除,无论它出现在单词中的什么位置(不仅仅是结尾)。此特定版本拒绝任何非字母的内容,但您可以通过更改条件签入轻松地将其更改为您想要的任何内容。WordsIn
WordsOut
remove_baddies/2
fix_words([WordIn | WordsIn], [WordOut | WordsOut]) :-
fix_word(WordIn, WordOut),
fix_words(WordsIn, WordsOut).
fix_words([], []).
fix_word(WordIn, WordOut) :-
atom_chars(WordIn, CharsIn),
remove_baddies(CharsIn, CharsOut),
atom_chars(WordOut, CharsOut).
remove_baddies([Char | CharsIn], [Char | CharsOut]) :-
(Char @>= 'A', Char @=< 'Z';
Char @>= 'a', Char @=< 'z'), !,
remove_baddies(CharsIn, CharsOut).
remove_baddies([_ | CharsIn], CharsOut) :-
remove_baddies(CharsIn, CharsOut).
remove_baddies([], []).
如果您只是对删除逗号感兴趣,那么定义remove_baddies
可能是:
remove_baddies([',' | CharsIn], CharsOut) :- !,
remove_baddies(CharsIn, CharsOut).
remove_baddies([Char | CharsIn], [Char | CharsOut]) :-
remove_baddies(CharsIn, CharsOut).
remove_baddies([], []).
以上仅使用 ISO 谓词 ( atom_chars/2
)。SWI Prolog 和 GNU Prolog 可能会提供一些内置功能,使确定字符类型更简单一些(例如,SWI Prolog 的char_type/2
谓词)。