我正在试图找到来自谓词Quiz时隙/3测试槽(Group,Day,S槽)的可用时隙。
问答(group4,星期二,1)。 问答时间(group4,星期四,1)。 问答时间(group6,星期六,5)。
这是我的假设,但似乎行不通。
available_timings(G,L):-集( X,问答槽(G,X,_),L)
我要(group4,L)的结果,L=星期二,1,星期四,1。
发布于 2016-03-18 12:23:30
集语法
% Set of every FooResult
?- setof(FooResult,foo(X,Y,FooResult),Result).
[FooResult1, FooResult2, ..]
% Set of tuples of every input X and FooResult
?- setof((X,FooResult),foo(X,Y,FooResult),Result).
[(X1,FooResult1), (X2,FooResult2), ..]
% Set of lists of every input X and FooResult, ommitting input Y
?- setof([X,FooResult],foo(X,_,FooResult),Result).
[[X1,FooResult1], [X2,FooResult2], ..]
我想你明白重点了。正如潜行者在上面的回答中所指出的,您正在尝试将插槽包含在结果中,但是,您告诉prolog查找所有不同的询问槽--表单的所有事实:
quizslot(group G, day X, whatever slot)
由于此通配符将与任何插槽匹配,因此无法检索持有该插槽的实际变量,Prolog没有麻烦为您检索变量。
例如,正确的用法将是以下内容之一
setof([Day,Slot], quizslot(Group,Day,Slot), Result) % List of lists
setof((Day,Slot), quizslot(Group,Day,Slot), Result) % List of tuples
https://stackoverflow.com/questions/36073552
复制相似问题