删除字符串中的符号

时间:2013-09-09 16:28:34

标签: prolog

我有一个字符串列表。有时字符串可以包含特定符号。例如,如果我有这个清单:

L=[dog,cat,tiger,,bear]

字符串"tiger,"","连接在一起。如何从","删除"tiger,"

1 个答案:

答案 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谓词)更加简单。