2012-10-04 33 views
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),但是因为句子是原子以外的东西而无法使用它。

回答

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] . 
相关问题