我有一个字符串列表。有时字符串可以包含特定符号。例如,如果我有这个清单:
L=[dog,cat,tiger,,bear]
字符串"tiger,"
与","
连接在一起。如何从","
删除"tiger,"
?
答案 0 :(得分:1)
下面的谓词fix_words(+WordsIn, -WordsOut)
将“修复”WordsIn
中产生WordsOut
的字词(字词)。 “fix”表示不会删除单词中不属于的任何字符,无论它出现在单词中的哪个位置(而不仅仅是结尾)。此特定版本拒绝任何非字母的内容,但您可以通过更改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
谓词)更加简单。