Smalltalk:发送+;更多+;资金问题

Smalltalk:发送+;更多+;资金问题,smalltalk,Smalltalk,我已经制作了一个程序来解决SEND+MORE=MONEY问题,但是在第20行我得到了一个预期的对象错误。我对Smalltalk不是很有经验,所以我不知道我必须做些什么来解决这个问题 我试图重新安排句号和括号的顺序,但似乎没有任何效果 |result| result := Solver anySolutionFor:[ |S E N D M O R Y| S := (1 %% 9) name:'S'. E := (0 %% 9)

我已经制作了一个程序来解决
SEND+MORE=MONEY
问题,但是在第20行我得到了一个预期的对象错误。我对Smalltalk不是很有经验,所以我不知道我必须做些什么来解决这个问题

我试图重新安排句号和括号的顺序,但似乎没有任何效果

|result|

    result :=
    Solver anySolutionFor:[
        |S E N D M O R Y|

        S := (1 %% 9) name:'S'.
        E := (0 %% 9) name:'E'.
        N := (0 %% 9) name:'N'.
        D := (0 %% 9) name:'D'.
        M := (1 %% 9) name:'M'.
        O := (0 %% 9) name:'O'.
        R := (0 %% 9) name:'R'.
        Y := (0 %% 9) name:'Y'.

        Solver allDistinct:{ S . E . N . D . M . O . R . Y }.

                 ((S*1000) + (E*100) + (N*10) + D)
          +              ((M*1000) + (O*100) + (R*10) + E)
          =: ((M*10000) + (O*1000) + (N*100) + (E*10) + Y).
    ].

    Transcript showCR:('result = %1' bindWith:result).
    Transcript showCR:''.

    Transcript showCR:('   %(S)%(E)%(N)%(D)' bindWithArguments:result).
    Transcript showCR:('+  %(M)%(O)%(R)%(E)' bindWithArguments:result).
    Transcript showCR:('-------').
    Transcript showCR:('= %(M)%(O)%(N)%(E)%(Y)' bindWithArguments:result).
预期结果是:
9567+1085=10652

而实际结果是:
main.gst:20:expected object

我甚至没有看到,但是如果我将其更改为:=我现在得到这个错误“main.gst:20:parse error,expected']”,您不能在
:=
的左侧有表达式,因为它是赋值运算符。你可以分别计算两个表达式,然后比较结果,如果这是你想要实现的。你能描述一下
SEND+MORE=MONEY
问题吗?基于您的代码,我有一个预感,但您应该描述您试图实现的目标。您应该按照@Lougler的建议修复代码。注意:Smalltalk没有大写字母“T”。我想应该是:为每个字母找到一个不同的数字值(介于:0和:9之间),这样等式就成立了。因此,您应该使用=来测试等式,而不是=:或:=您能告诉我们您使用的是哪种Smalltalk和哪种解算器吗?
=:
不是普通的Smalltalk语法,但我理解它应该如何工作…