列表中有多个变量,并检查列表中是否包含变量.Prolog



我想添加这样的成员:

member(name(fred),age(33),sports([tenis,football])).
member(name(ann),age(18),sports([basketball,football])).
member(name(abc),age(26),sports([golf,tenis])).
member(name(cbd),age(40),sports([tenis])).

insert_member :- write('Name:'),read(Name),write('Age:'),read(Age),
write('sports:'),read([Sport1,Sport2]),
assert(member(name(Name),age(Age),sports([Sport1,Sport2]))).

但出现错误:错误:没有修改静态过程"member/3"的权限ᄀ错误:在:错误:[11]断言(成员(姓名(rob(、年龄(33(、运动(…((错误:注意:由于上次调用优化,一些帧丢失。

第二个问题是,如果我想检查成员年龄是否>20岁,在体育运动中得了10分,我就是这样做的:

check(N) :- member(name(N),age(K),sports(D),_),(K>20-> write(K),(D='tenis' -> write(D))).

有什么建议吗?

第一个问题:在第三个read中,您期望sport1sport2,它们是原子,没有变量。使用大写字母修复它。

第二个问题:成员的格式错误,它是一个三元谓词。附加的_作为第二个参数属于运动。此外,如果你想检查tenis是否是运动列表的一部分,你可能需要检查所有条目。我用预定义的谓词member/2证明了这一点。我还更改了编写顺序,假设您只想在两个条件都成立的情况下编写结果。

代码:

insert_member :- write('Name:'),read(Name),write('Age:'),read(Age),
write('sports:'),read([Sport1,Sport2]), 
assert(member(name(Name),age(Age),sports([Sport1,Sport2]))).
check(N) :- member(name(N),age(K),sports(L)),
(K>20-> (member('tenis',L) -> write(K), write(" "), write('tenis'))).

最新更新