制約プログラミング
:: という記号はそれら変数の領域を指定するもので、上の例では値の範囲が {0,1,2,3, ..., 9} となる。制約 S#\=0 と M#\=0 は、これらの変数がゼロにはならないことを指定する。インタプリタはこれらの制約を評価して、それらの変数がとりうる範囲から 0 を除く。次に制約 alldifferent(Digits) を評価する。これは範囲を狭めることにはならず、単に格納される。最後の制約は、"SEND+MORE=MONEY" の各文字を数字に置き換えた式が数式として真であることを示している。この制約から、まず M=1 が導き出される(4桁と4桁の加算で5桁になるということは、答えの5桁目は必ず 1 となる)。ここで変数 M に関わる全制約が呼び出され、alldifferent 制約への制約伝播により、他の変数のとりうる範囲から 1 が除かれる。制約伝播によって全ての変数の値が一意に定まるか、全制約を満たす解がないことが判明する。ただし、どちらとも判別できずに終了することもある。