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 に答える