我想添加这样的成员:
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
中,您期望sport1
和sport2
,它们是原子,没有变量。使用大写字母修复它。
第二个问题:成员的格式错误,它是一个三元谓词。附加的_
作为第二个参数属于运动。此外,如果你想检查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'))).