【问题标题】:Prolog kenken solver 4 by 4Prolog kenken 求解器 4 x 4
【发布时间】:2013-11-24 22:20:57
【问题描述】:

所以我尝试使用 prolog 解决 kenken,但我从一开始就遇到了几个问题,首先可以说我像 kenken([X1,X2,X3,.....X16]) 一样运行它。我想用我之前定义的规则来解决这个 x。所以假设第一个单元格有 3 个值 X1、X2 和 X3,我想通过乘法得到 2,这意味着 X1*X2*X3=2,现在我如何设置规则以查看所有可能的解决方案,如果我有类似的东西。 还有我如何告诉我的 x 只使用 1-4 的值范围。 我试图做类似的事情

:- use_module(library(clpr)).
solve([X1,X2,X3]):-
    {X1*X2*X3=2}.

但它给了我一个非常奇怪的输出。

【问题讨论】:

    标签: prolog constraint-programming


    【解决方案1】:

    由于您使用整数而非浮点数进行推理,因此请考虑使用 library(clpfd) 而不是 CLP(R)。在 SICStus、SWI 和 YAP 中,您可以将有限域变量 X 约束为整数范围 1-4:

    X in 1..4

    您可以使用内置谓词label/1 来搜索具体的解决方案。 SWI-Prolog 示例:

    ?- Vars = [A,B,C], A*B*C #= 2, Vars ins 1..4, label(Vars).
    

    屈服:

    Vars = [1, 1, 2], A = B, B = 1, C = 2 ;
    Vars = [1, 2, 1], A = C, C = 1, B = 2 ;
    Vars = [2, 1, 1], A = 2, B = C, C = 1.
    

    【讨论】:

      【解决方案2】:

      您需要is 运算符来进行算术运算:

      2 is X1*X2*X3

      请注意,除非 X 都绑定到数字,否则这将不起作用。

      【讨论】:

      • 现代 Prolog 系统提供 约束 作为 is/2 的更具声明性的替代方案。 OP 已经在使用 CLP(R),它不需要is/2,也允许在算术表达式中使用变量。
      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 2016-01-13
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多