List 列表中有多个变量,并检查列表是否包含变量。序言
我想添加这样的成员:List 列表中有多个变量,并检查列表是否包含变量。序言,list,variables,prolog,List,Variables,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
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]))).
check(N) :- member(name(N),age(K),sports(D),_),(K>20-> write(K),(D='tenis' -> write(D))).
但是得到一个错误:错误:没有修改静态过程'member/3'的权限
ᄀ错误:在:
错误:[11]断言(成员(姓名(rob)、年龄(33)、运动(…))
错误:注意:由于上次调用优化,某些帧丢失
第二个问题是,如果我想检查一名会员的年龄是否大于20岁,并且在体育运动中获得了“十位数”,我会这样做:
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]))).
check(N) :- member(name(N),age(K),sports(D),_),(K>20-> write(K),(D='tenis' -> write(D))).
有什么建议吗?第一个问题:在第三个
阅读中,您期望sport1
和sport2
,它们是原子,没有变量。使用大写字母可以修复它
第二个问题:member的格式错误,它是一个三元谓词。附加的\u
作为第二个参数属于sport。此外,如果您想检查tenis是否是运动列表的一部分,您可能需要检查所有条目。我用预定义的谓词member/2
演示了这一点。我还更改了写入顺序,假设您只想在两个条件都为真的情况下写入结果
代码:
检查你的拼写-你真的写了“write”吗?请添加一些成员事实,以便于复制和讨论。ye my bad i fix拼写错误成员(姓名(ann)、年龄(18岁)、体育([篮球、足球])。会员(姓名(abc),年龄(26岁),体育([高尔夫,tenis])。成员(姓名(cbd),年龄(40岁),体育([tenis])。但是它没有改变任何事情你现在还得到错误信息吗?如果没有,请编辑你的问题。是的,一直都是这样,我只是抄错了,我写错了,很抱歉,但问题还是一样的。我改为大写字母,但还是一样的问题。现在我得到这样的错误:错误:未知过程:成员/2错误:错误:[11]成员(tenis,[tenis])在输入insert\u成员后,您在read
s中输入了什么。年龄:33岁。体育:泰尼斯足球。@Mateusz。抱歉,我假设您使用了SWI Prolog。你用什么?好的,我没看见任何人。也许你想用所有相关代码更新问题,我会更新答案。