0

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

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

该字符串"tiger,"","单词连接。我该怎么做才能删除","from "tiger,"

4

1 回答 1

1

下面的谓词, 将“修复” yieldingfix_words(+WordsIn, -WordsOut)中的单词(术语)。“修复”意味着单词中不属于的任何字符都将被删除,无论它出现在单词中的什么位置(不仅仅是结尾)。此特定版本拒绝任何非字母的内容,但您可以通过更改条件签入轻松地将其更改为您想要的任何内容。WordsInWordsOutremove_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谓词)。

于 2013-09-10T12:46:50.010 回答