2012-10-04 3 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

독창적 인 방식으로 읽기/1이 작동합니다. 매우 강력한 기본 요소로, Prolog 구문을 완전히 구문 분석 할 수 있습니다. 그러나 그 공간은 입력이 잘못 형성되게합니다. 그런 다음 리터럴을 따옴표로 묶거나 다른 입력 기본 문자를 사용하십시오. 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] . 
:

SWI - 프롤로그에서
?- palindrome('DoD DoD'). 

,이 쿼리는 검사를 수행합니다