gpt4 book ai didi

prolog - 如何表达 allDifferent/6 谓词?

转载 作者:行者123 更新时间:2023-12-02 01:16:17 25 4
gpt4 key购买 nike

allDifferent(A, B, C, D, E, F) 为真当且仅当 ∀i, j 在{1, 2, 3, 4, 5, 6},第 i 和第 j 个参数统一当且仅当 < em>i = j.

因此 allDifferent(3, 1, 4, 1, 5, 9) 为假,但是 allDifferent(3, 1, 4, 2, 5, 9)是真的。

如何在 Prolog 中实现 allDifferent/6

特别是,有没有一种表达方式不需要列出 6-choose-2 = 15 非等式 AB, AC, ..., EF(或者更确切地说,他们的 Prolog 演绎版)?

最佳答案

如果您接受 allDifferent 收到一个值列表(而不是六个值),我可以提出以下解决方案

isDifferent(_, []).

isDifferent(X, [H | T]) :-
X \= H,
isDifferent(X, T).

allDifferent([]).

allDifferent([H | T]) :-
isDifferent(H, T),
allDifferent(T).

-- 编辑 --

根据 False 的建议,您可以使用 dif/2 而不是 \= (如果您的 Prolog 提供了它)所以主要的 isDifferent/2可以

isDifferent(X, [H | T]) :-
dif(X, H),
isDifferent(X, T).

无论如何......希望这是显而易见的......但如果你真的想要一个allDifferent/6而不是一个接收列表的allDifferent/1,你可以定义你的allDifferent/6如下

allDifferent(A, B, C, D, E, F) :-
allDifferent([A, B, C, D, E, F]).

关于prolog - 如何表达 allDifferent/6 谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com