Prolog 密码算术难题序言

Prolog 密码算术难题序言,prolog,cryptarithmetic-puzzle,Prolog,Cryptarithmetic Puzzle,我在Prolog中有以下任务: 查找字母到数字的分配(每个字母到不同的数字),以便以下产品适用: 水*水=海洋 如果代码如下所示: :- use_module(library(clpfd)). ocean(L) :- L = [O,C,E,A,N], L2 = [U|L], all_different(L2), L2 ins 0..9, EAU #= E*100 + A*10 + U, OCEAN #= O*10000 + C * 1000 + E*100

我在Prolog中有以下任务:

查找字母到数字的分配(每个字母到不同的数字),以便以下产品适用:

水*水=海洋

如果代码如下所示:

:- use_module(library(clpfd)).

ocean(L) :-
   L = [O,C,E,A,N],
   L2 = [U|L],
   all_different(L2),
   L2 ins 0..9,
   EAU #= E*100 + A*10 + U,
   OCEAN #= O*10000 + C * 1000 + E*100 + A*10 + N,
   EAU * EAU #= OCEAN,
   labeling([], L2).
请有人解释一下:

L2 ins 0..9的含义是什么(为什么这些数字之间的范围是多少?)

将字母乘以这些特定的数字*10000+C*1000+E*100和E*100+A*10+U等有什么意义


非常感谢您提供的指导。

'0..9'仅表示一个数字:0、1、2、3、4、5、6、7、8或9

EAU#=E*100+A*10+U
表示数字“EAU”由按特定顺序排列的数字“E”、“A”和“U”组成。例如,如果您有一个数字735=7*100+3*10+5

类似地,“海洋”是一个五位数的数字


此外,您提供的程序中的约束在我看来是不完整的。还应该说明的是,每个数字的第一个数字都大于0,因为通常我们不使用带前导零的数字,如“0123”。

您应该查看此页以了解代码(可能会修复它)!