Prolog:为什么 member/2 在这里不能正常工作?

Prolog: Why is member/2 not working properly here?

我遇到了一个有趣的问题:

在我的代码中,[R|Rs] 是通过从 SortedRanks 中删除 Seq 生成的列表的其余部分。它将包含 1 或 2 个元素。数量取决于Seq的长度,Length可以是3或4。

如果长度为4,[R|Rs]只有一个元素;

如果长度为 3,[R|Rs] 将有两个元素。

然而,当长度为 3 时,我尝试使用 member/2 来查找 Rs(我认为是 [R|Rs] 中的最后一个元素)是否在 Seq,即使里面有Rsmember/2/ returns false。我在这里真的很困惑。

以下是我的代码:

calculate_run( SortedRanks, Seq, [R|Rs], Length, Seq ) :-
  remove_list(SortedRanks, Seq, [R|Rs]),
  ( Length = 4 ->
    ( member(R,Seq) -> Number is 2 ; Number is 1 )
  ;
    ( member(R,Seq) ->
      ( member(Rs,Seq) ->
        ( R =:= Rs ->
            Number is 3
          ;
            Number is 4
        )
      ;
        Number is 2
      )
    ;
      ( member(Rs,Seq) ->
        Number is 2
      ;
        Number is 1
      )
    )
  ),
  Points is Length * Number . 

主要问题是member(Rs,Seq) 没有返回正确的布尔值。我是 prolog 的新手,是的,我承认这不是一个优雅的解决方案,但这是我现在能做的最好的。

没有任何例子我无法判断你在做什么,但我怀疑“即使里面有 Rs”是不准确的;我猜你的问题是在 [R|Rs] 中,Rs 是一个列表而不是一个元素。

If the length is 4, [R|Rs] would only have one element

与单元素列表统一:[R|Rs] = [5]R=5Rs=[]

If the length is 3, [R|Rs] would have two elements.

统一两个元素列表:[R|Rs]=[5,6]R=5Rs=[6] 而不是 Rs=6

例如

?- [R|Rs] = [1,2],
member(Rs, [1,2,3]).

false

因为 [2] 不是 [1,2,3] 的成员。

?- [R|Rs]=[1,2],
member(Rs, [1,[2],3]).

R = 1,
Rs = [2]

因为[2][1,[2],3]的成员。