2

我正在尝试编写一个 Prolog 程序,该程序需要获取用户的自然语言输入并将其与一组原子进行匹配。我正在使用 SWI Prologreadln/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]似乎是我的问题,但我不知道如何解决它,因为我已经尝试过 usingappend/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 程序员),所以我很可能遗漏了一些基本的东西。帮助?

4

1 回答 1

5

如果您已经有一个原子列表,要对它们进行小写,您必须使用maplist/3and应用映射downcase_atom/2

downcase_list(AnyCaseList, DownCaseList):-
  maplist(downcase_atom, AnyCaseList, DownCaseList).
于 2013-04-30T18:15:06.840 回答