次の式は、2 つのコンス セルが等しくない 2 つのコンス セルで構成される多数の結果を返すことを期待しています。ただし、0 の結果が返されます。結果が得られないのはなぜですか?
(run* [c1 c2]
(fresh [lx ly x1 y1 x2 y2]
(== lx [1 2])
(== ly [4 5])
(membero x1 lx)
(membero x2 lx)
(membero y1 ly)
(membero y2 ly)
(conso x1 y1 c1)
(conso x2 y2 c2)
(!= c1 c2)))
期待される結果の例:
[(1 . 4) (2 . 5)]
[(1 . 4) (1 . 5)]
[(2 . 4) (2 . 5)]
[(1 . 4) (1 . 4)]
各コンスの両方のスポットが等しいような結果を返すとは思いません。
その(!= c1 c2)
部分を取り除くと、両方の短所が同じものを含めて、16 の結果が得られます。
(!= c1 c2)
次のように置き換えると、期待どおりの結果が得られます。
(conde
((!= x1 x2))
((!= y1 y2)))
同じことを行う必要がありますが、2 つのセルを明示的にチェックします。