我正在使用Prolog开发一个uni项目,我发现很难解释我的代码所以我只是在这里插入它(这不是我的项目的实际代码,但它的想法相同)
getlist1([H|T]):- read(X), not(X=end), H=X, getlist1(T).
getlist1([]).
getlist2([H|T]):- read(X), not(X=end), H=X, getlist1(T).
getlist2([]).
go:-write('select from the following:\n1.red 2.yellow 3.blue\n(type end if done)'),
getlist1(R),sort(R,R2),
write('select from the following:\n1.green 2.orange 3.pink\n(type end if done)'),
getlist2(E),sort(E,E2),
u(R2,E2).
u([1,2],[2]):-write('one').
u([1],[2,3]):-write('two').
u(_,_):-write('try again').
所以现在例如说用户输入1,2,3作为第一个列表 和第二个列表中的2,我想要显示第一个规则u([1,2],[2]),这可能吗?
答案 0 :(得分:1)
以下似乎有效:
% getlist1/1 and getlist2/1 were the same so one getlist/1 is enough
getlist([H|T]):- read(H), H \== end, getlist(T).
getlist([]).
go:-write('select from the following:\n1.red 2.yellow 3.blue\n(type end if done)'),
getlist(R),sort(R,R2),
write('select from the following:\n1.green 2.orange 3.pink\n(type end if done)'),
getlist(E),sort(E,E2),
once(u(R2,E2)).
u([1,2|_],[2]):-write('one').
u([1],[2,3]):-write('two').
u(_,_):-write('try again').
只需添加|_
,用户就可以在第一个列表中添加任意数字> 2,但仍会显示第一条规则。