我正在查看一些序言示例并偶然发现http://www.anselm.edu/internet/compsci/faculty_staff/mmalita/HOMEPAGE/logic/bufalo.txt
first_names([keith,libby,margo,nora,otto]).
last_names([fell,grant,hall,ivey,jule]).
ages([2,3,4,5,6]).
start(Sol):- first_names(F),last_names(L),ages(A),
Sol=[[F1,L1,A1],[F2,L2,A2],[F3,L3,A3],[F4,L4,A4],[F5,L5,A5]],
F=[F1,F2,F3,F4,F5], % if order is not important!
member([libby,jule,_],Sol), % 1
set_equal([L1,L2,L3,L4,L5],L), % write correspondence
set_equal([A1,A2,A3,A4,A5],A),
member([keith,_,AgeK],Sol), % 2
member([_,ivey,AgeI],Sol),AgeK is AgeI+1,
member([nora,_,AgeN],Sol),AgeI is AgeN+1,
member([margo,_,AgeM],Sol),
member([_,fell,AgeF],Sol),AgeF is 3+AgeM,
member([otto,_,AgeO],Sol),member([_,hall,AgeH],Sol).
在这个代码示例中,我对它的工作原理有一个大致的了解,但我真的不确定具体细节
我理解将提示定义为原子列表,第一个字段是名字,第二个字段是姓氏,第三个字段是年龄,下划线显示缺失信息。但是我不太确定为什么在 Sol 数组上使用 member 来调用它。不确定它在这种情况下会做什么
此外,我不太了解此代码中 set_equal 和 F= 的用途。似乎它设置了三个根本没有引用的变量?
谢谢你的帮助!