Send More Money
MINERVA superseeded IF/Prolog. Please see http://www.ifcomputer.co.jp/MINERVA for details.

We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008.

To illustrate finite domain constraints we consider the classic "SEND MORE MONEY" prob- lem where the three words represent a sum (SEND + MORE = MONEY) and each letter a variable which takes one of the integers 0 to 9.

Traditionally this problem takes a considerable amount of search time to find the solution by considering all possible integer values for each variable in turn. Using constraints, the values are propagated and the solution is calculated directly.

:-  import(const_domain).

send([[S,E,N,D], [M,O,R,E], [M,O,N,E,Y]]) :- Digits = [S,E,N,D,M,O,R,Y], Carries = [C1,C2,C3,C4], Digits in 0..9, Carries in 0..1,

M ?= C4, O + 10 * C4 ?= M + S + C3, N + 10 * C3 ?= O + E + C2, E + 10 * C2 ?= R + N + C1, Y + 10 * C1 ?= E + D,

M ?>= 1, S ?>= 1, all_distinct(Digits), label(Digits).

[user] ?- send(X). X = [[9,5,6,7],[1,0,8,5],[1,0,6,5,2]] yes


Darueber read on...