Prolog 我怎样才能得到这段代码所做的呢?

Prolog 我怎样才能得到这段代码所做的呢?,prolog,Prolog,有人能解释一下这段代码在做什么吗。除第一个参数为空列表或第二个参数不是列表(甚至是未绑定的变量)外,它总是成功的。所以这是对空列表测试的否定,有点,有点。对于who(X,Y)甚至who(X,Y),它也会进入一个无限循环,这显然是一个来自“练习图灵机”文件夹的邪恶随机程序。失败的次数比你列出的要多:who([X],[X])失败,尽管两个参数都是非空列表。这个谓词所接受的关系类似于“第一个参数是一个非空列表,其中由第二个参数中的元素组成的前缀(可能是空的)后面必须跟一些不在第二个参数中的元素”。@I

有人能解释一下这段代码在做什么吗。除第一个参数为空列表或第二个参数不是列表(甚至是未绑定的变量)外,它总是成功的。所以这是对空列表测试的否定,有点,有点。对于
who(X,Y)
甚至
who(X,Y)
,它也会进入一个无限循环,这显然是一个来自“练习图灵机”文件夹的邪恶随机程序。失败的次数比你列出的要多:
who([X],[X])
失败,尽管两个参数都是非空列表。这个谓词所接受的关系类似于“第一个参数是一个非空列表,其中由第二个参数中的元素组成的前缀(可能是空的)后面必须跟一些不在第二个参数中的元素”。@IsabelleNewbie我打赌你是某种AI。确实很精确。
who([H|T], B) :-
   member(H, B), !,
   who(T, B).
who([_|_], _).