我正在尝试编写程序以确定句子是否是回文。这就是我到目前为止所做的:
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),但在使用它时遇到问题,因为句子不是原子。
答案 0 :(得分:0)
?- 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] .