PROLOG - 如何使用从键盘读取的值进行搜索

时间:2013-07-10 01:44:34

标签: prolog

我们,我想使用以下搜索序言来执行以下操作:返回所有具有相同性别的人,但应该从键盘上读取性别。我可以在不阅读键盘的情况下完成,代码如下所示:

person('1', 'Joane', 'Women').  
person('2', 'John', 'Man').  
person('3', 'Peter', 'Man').  
listaBySex(List):-  
findall(Name, pessoa(_, Name , 'Man'), List). 

现在我的困难是用键盘读取的值进行这项研究,我可以从键盘读取值,大多数不知道如何将此值与readall相关联,以便在代码看起来返回值像这样:

person('1', 'Joane', 'Women').  
person('2', 'John', 'Man').  
person('3', 'Peter', 'Man'). 
listaBySex(List):- 
write('Sex: '), read(Sex),
findall(Name, pessoa(_, Name , Sex), List). 

1 个答案:

答案 0 :(得分:2)

除了您的数据库有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).

这就是它返回整个数据库的原因。您可能需要更仔细地处理输入以使其按照您的需要进行操作。毕竟,你可能不想在行尾输入句号。