【发布时间】:2019-03-14 07:14:24
【问题描述】:
我是 swi-prolog 的新手,所以基本上我不知道如何编写代码...... 无论如何,我需要写一个关于课程先决条件的预测。它将返回所有所需课程的列表。这是我的代码:
course(cmput325).
course(cmput175).
course(cmput201).
course(cmput204).
prerequisite(cmput204, cmput325).
prerequisite(cmput175, cmput201).
prerequisite(cmput175, cmput204).
/*required(+C,?L)*/
pre(X,C) :- prerequisite(X,C).
pre(X,C) :- prerequisite(X,Y), pre(Y,Z).
pre2(C,L) :- findall(L1,pre(L1,C),L).
required(C,L) :- sort(pre2(C,L1),L).
除了最后一个需要(C,L)之外,我得到了所有正确的结果,pre2(cmput325,L)将返回[cmput204,cmput175],我想对这个列表进行排序,所以它会变成[cmput175,cmput204]。然后我尝试编写一个新的谓词来处理它。但是,swi-prolog 只是给了我错误:
ERROR: Type error: `list' expected, found `pre2(cmput325,_3718)' (a
compound)
ERROR: In:
ERROR: [9] sort(pre2(cmput325,_3770),_3764)
ERROR: [8] required(cmput325,_3796) at c:/users/mxu3/desktop/a3.pl:19
ERROR: [7] <user>
Exception: (9) sort(pre2(cmput325, _3322), _3110) ? creep
Exception: (8) required(cmput325, _3110) ? creep
在这个阶段,我不知道如何解决这个问题......谁能告诉我我应该把这个排序命令放在哪里?谢谢……
【问题讨论】:
-
考虑回滚您的编辑并将所有新内容(“现在我需要写一个新的......”)作为一个新问题发布。
-
好的,我会删除它们并写一个新问题,谢谢你的建议。
标签: list sorting prolog typeerror