ユーザーの自然言語入力を受け取り、一連のアトムと照合する必要がある Prolog プログラムを作成しようとしています。SWI Prolog を使用readln/1
して入力を取得し、それをアトムのリストに入れていますが、ユーザー入力の大文字と小文字の保証がないため、一致を試みる前に、取得したすべての入力を小文字にしたいだけです. 私が今持っているものは次のとおりです。
downcase_list(AnyCase, LowerCase) :- dcl(AnyCase, X), flatten(X,LowerCase).
dcl([], List) :- List.
dcl([Head|Rest], []) :- downcase_atom(Head,X), dcl(Rest,X).
dcl([Head|Rest], List) :- downcase_atom(Head,X), dcl(Rest, [List|X]).
usingの追加[List|X]
が私の問題のようですが、既に使用append/3
を試みて無限ループになったので、修正方法がわかりません。
downcase_list([], List) :- List.
downcase_list([Head|Rest], []) :- downcase_atom(Head,X), downcase_list(Rest, X).
downcase_list([Head|Rest], NewList) :- downcase_atom(Head,X), append(NewList,X,Z), writeln(Z), downcase_list(Rest,Z).
私は Prolog に非常に慣れていないので (この時点で自分自身を Lisp プログラマーに分類します)、基本的なことを見逃している可能性が非常に高いです。ヘルプ?