确定一个句子是否是prolog中的回文

时间:2012-10-04 20:03:50

标签: prolog palindrome

我正在尝试编写程序以确定句子是否是回文。这就是我到目前为止所做的:

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),但在使用它时遇到问题,因为句子不是原子。

1 个答案:

答案 0 :(得分: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] .