PROLOG-如何使用从键盘读取的值进行搜索
伙计们,我想用下面的搜索序言来做以下事情:返回所有有同性的人,但是应该从键盘上读取他们的性别。我可以不用读键盘,代码如下:PROLOG-如何使用从键盘读取的值进行搜索,prolog,Prolog,伙计们,我想用下面的搜索序言来做以下事情:返回所有有同性的人,但是应该从键盘上读取他们的性别。我可以不用读键盘,代码如下: person('1', 'Joane', 'Women'). person('2', 'John', 'Man'). person('3', 'Peter', 'Man'). listaBySex(List):- findall(Name, pessoa(_, Name , 'Man'), List). person('1', 'Joane', 'Wom
person('1', 'Joane', 'Women').
person('2', 'John', 'Man').
person('3', 'Peter', 'Man').
listaBySex(List):-
findall(Name, pessoa(_, Name , 'Man'), List).
person('1', 'Joane', 'Women').
person('2', 'John', 'Man').
person('3', 'Peter', 'Man').
listaBySex(List):-
write('Sex: '), read(Sex),
findall(Name, pessoa(_, Name , Sex), List).
现在我的困难是通过从键盘读取的值来进行这项研究,我可以从键盘读取值。大多数人不知道如何将此值与read findall关联,以返回代码如下所示的值:
person('1', 'Joane', 'Women').
person('2', 'John', 'Man').
person('3', 'Peter', 'Man').
listaBySex(List):-
findall(Name, pessoa(_, Name , 'Man'), List).
person('1', 'Joane', 'Women').
person('2', 'John', 'Man').
person('3', 'Peter', 'Man').
listaBySex(List):-
write('Sex: '), read(Sex),
findall(Name, pessoa(_, Name , Sex), List).
除了您的数据库有
person/3
并且您正在调用pessoa/3
之外,您的代码按原样工作,您只需在输入时引用性别:
?- listaBySex(List).
Sex: 'Man'.
List = ['John', 'Peter'].
?- listaBySex(List).
Sex: 'Women'.
List = ['Joane'].
问题是,read/1
读取一个Prolog术语,因此当您输入不带引号的Man
时,Prolog将其作为变量读取,因此您的代码实际上与以下内容相同:
listaBySex(List) :-
read(_), findall(Name, pessoa(_, Name, _), List).
这就是它返回整个数据库的原因。您可能需要更仔细地处理输入,以使其满足您的需要。毕竟,你可能也不想在行尾输入句号。OT,但应该是
person('1','Joane','Women')。
为了澄清George的信息,你应该接受Daniel的答案(点击复选框…)