gpt4 book ai didi

prolog - 在 Prolog 中解决数谜题 (5x5)

转载 作者:行者123 更新时间:2023-12-02 07:08:06 25 4
gpt4 key购买 nike

enter image description here

假设:

A+B+C=24
E+F+G=11
J+K+L=22
N+O+P=14
A+E=17
B+F+J+N=26
C+G+K+O=15
L+P=13

在给定上述约束的情况下,我如何使用谓词 solve/1 找到问题的可能解决方案?我的第一次尝试如下,但没有结果。提前致谢!

solve(L1) :-
L1 = [A,B,C,E,F,G,J,K,L,N,O,P],
A is 24-B-C,
B is 26-F-J-N,
C is 15-G-K-O,
E is 11-F-G,
E is 17-A,
J is 22-K-L,
N is 14-O-P,
L is 13-P,
write(L1).

最佳答案

正如@lurker 在他的评论中已经说过的,使用CLP(FD) 约束

此外,我建议:

  1. 使用 solution/1声明性名称,而不是 solve/1。您应该描述解决方案的内容,以便这种关系在各个方向上都有意义,例如,如果解决方案已经给出并且您想要验证它。
  2. 按照惯例,代表列表的变量以s结尾是有意义的。
  3. 将副作用与纯代码分开。事实上,完全消除副作用。让为您打印!

例如:

:- use_module(library(clpfd)).

solution(Ls) :-
Ls = [A,B,C,E,F,G,J,K,L,N,O,P],
A #= 24-B-C,
B #= 26-F-J-N,
C #= 15-G-K-O,
E #= 11-F-G,
E #= 17-A,
J #= 22-K-L,
N #= 14-O-P,
L #= 13-P.

这已经适用于以下查询:

?- solution(Ls), Ls ins 0..sup, label(Ls).
Ls = [6, 3, 15, 11, 0, 0, 9, 0, 13, 14, 0, 0] ;
Ls = [6, 3, 15, 11, 0, 0, 10, 0, 12, 13, 0, 1] ;
Ls = [6, 3, 15, 11, 0, 0, 11, 0, 11, 12, 0, 2] ;
etc.

我将完成此任务作为一项简单的练习。

关于prolog - 在 Prolog 中解决数谜题 (5x5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35026596/

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