Kri*_*ack 2 list prolog swi-prolog
我正在尝试编写一个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]).
Run Code Online (Sandbox Code Playgroud)
追加使用[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).
Run Code Online (Sandbox Code Playgroud)
我对Prolog还是很陌生(目前我将自己归类为Lisp程序员),所以很可能我缺少基本知识。救命?
如果您已经有了原子列表,则要缩小它们的大小,必须使用maplist/3和映射downcase_atom/2:
downcase_list(AnyCaseList, DownCaseList):-
maplist(downcase_atom, AnyCaseList, DownCaseList).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |