-1

我在 Prolog 中有以下任务:

找到字母与数字的分配(每个字母与不同的数字),以便以下产品成立:

EAU * EAU = 海洋

如果此代码如下:

:- 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 等是什么意思?

非常感谢您提供的任何指导。

4

1 回答 1

1

'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。

类似地,“OCEAN”是一个五位数的数字。

此外,您提供的程序中的限制对我来说看起来不完整。还需要说明的是,每个数字的第一个数字都大于 0,因为通常我们不会使用像 '0123' 这样带有前导零的数字。

于 2014-05-27T01:30:58.670 回答