Prolog简单的任务对我来说并不简单

时间:2015-03-30 22:00:20

标签: prolog

我必须说我根本不懂这种语言,但我想通过例子来学习它,所以请理解我。我必须写出所有人 已经借用至少两件物品(按这些人的身份证和信件)。

这是简单的数据库:)

person(1,"A").
person(2,"B").
person(3,"C").
person(4,"D").
person(5,"E").
person(6,"F").

borrowed(1001,1).
borrowed(1002,1).
borrowed(2001,1).
borrowed(1004,2).
borrowed(1005,4).
borrowed(2003,4).
borrowed(2005,5).
borrowed(2006,5).

1 个答案:

答案 0 :(得分:0)

假设您的person/2被定义为person( unique-id , name )且您的borrowed/2代表borrowed( id-of-borrowed-item , person-id-of-borrower ),那么这样的事情应该是这样的:

borrower_by_count( Name , N ) :-
  person(Id,Name) ,              % find the person 
  findall(X,borrowed(X,Id),Xs) , % find all the items they've borrowed
  length(Xs,N).                  % check the length:

这适用于任何N值。像borrower_by_count( Name , 3 ).这样的东西应该返回

Name = "A"

borrower_by_count( Name , 2 ).应该返回(当你回溯到它时):

Name = "D"
Name = "E'

它也有另一种方式:borrowed( "A" , N )应该返回

N = 3.

如果两个论点都没有约束,它应该连续列举每个人和他们借来的项目数。