我在Prolog中有以下任务:
找到字母到数字的分配(每个字母到不同的数字),以便以下产品成立:
EAU * EAU = OCEAN
如果代码如下:
:- 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 :(得分: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'。