2

我正在尝试编写一个程序来确定一个句子是否是回文。这是我到目前为止所拥有的:

palindrome :- write('Sentence: '),
    read(Word),
    name(Word,List),
    palCheck(List).

palCheck(List) :- reverse(List,List).

reverse(L1,L2) :- rev(L1,[],L2).
rev([],L,L).
rev([H|L],L2,L3) :- rev(L,[H|L2],L3).

我遇到的问题是当我到达空格或大写字母时。我最终想要的是能够编写 DoD dod 并让它通过。我曾尝试使用 downcase_atom(X,Y),但在将其用作句子时遇到了麻烦,这不是原子。

4

1 回答 1

0

read/1 以一种特殊的方式起作用:它是一个非常强大的原语,能够完全解析 Prolog 语法。但是空间使输入格式不正确。然后用引号将文字括起来,或使用其他一些输入原语:请参阅您的 Prolog 手册!

?- palindrome('DoD DoD').

在 SWI-Prolog 中,此查询进行检查:

?- current_stream(_,read,S), read_line_to_codes(S,Cs), maplist(to_lower,Cs,Ls), reverse(Ls,Ls).
|: AbcCBA
S = <stream>(0x7fae7b1088e0),
Cs = [65, 98, 99, 67, 66, 65],
Ls = [97, 98, 99, 99, 98, 97] .
于 2012-10-04T20:13:42.017 回答