繁体   English   中英

使用Prolog在列表中搜索值

[英]Searching for a value in a list with Prolog

我在Prolog中编写了一个递归函数,以检查一个学期(SEM,一个列表)中的一门课程(Crs)是否在Prior(列表)中满足了其必修课程。 第二段代码中有2个课程示例。 但是,当它运行时,它对于csse1001(没有先决条件)会失败,应该返回true,因为它无需进行任何搜索。 我想念什么?

checkSem(Prior,[]). 
checkSem(Prior,SEM):-
    [Crs|Tail] = SEM,
    member(pre(Crs,List),Prior),
    checkSem(Prior,Tail).

课程:

partA(comp3506).
lvl3(comp3506).
s1(comp3506).
pre(comp3506,[csse2002]).

partA(csse1001).
lvl1(csse1001).
s1(csse1001).
pre(csse1001,[]).

您没有提供对checkSem/2查询示例,但我想它的第一个参数Prior是课程列表。 然后,我认为您应该检查课程名称是否是Prior的成员,而不是pre(Crs, List) 其次,由于您具有先决条件列表,而不仅仅是一个,因此您应该检查所有先决条件是否是Prior中的成员。

checkSem(_,[]).
checkSem(Prior,[Crs|Tail]):-
    pre(Crs, List),
    \+ (member(Prereq, List), \+ member(Prereq, Prior)),
    checkSem(Prior,Tail).

如果不存在作为List成员并且不是Prior成员的课程Prereq ,则满足此目标\\+ (member(Prereq, List), \\+ member(Prereq, Prior))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM