Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列表中有多个变量,并检查列表是否包含变量。序言_List_Variables_Prolog - Fatal编程技术网

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。你用什么?好的,我没看见任何人。也许你想用所有相关代码更新问题,我会更新答案。