我正在尝试编写一个 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 程序员),所以我很可能遗漏了一些基本的东西。帮助?