在Pharo Smalltalk中解决评估,请以whileTrue:
和do
两种方式循环整个代码
这是我试过的,但它给了我一个错误的答案。
| x y z count elem sum |
x := #(84 45 54).
sum := 0.
z := 1.
y := x size.
elem := x at: z.
[z < y] whileTrue: [ elem even ifTrue: [sum := sum + elem.]. z := z + 1.].
Transcript clear.
Transcript show: sum.
Yes是错误的,因为"总是一样的。
你必须这样做:
| x y z count elem sum |
x := #(84 45 54 ).
sum := 0.
z := 1.
y := x size.
[z <= y] whileTrue: [
elem := x at: z.
elem even ifTrue: [sum := sum + elem.]. z := z + 1.
].
Transcript clear.
Transcript show: sum.
或更简洁的
| x |
x := #(84 45 54 ).
sum := 0.
x do:[:each | each even ifTrue: [sum := sum + each.].].
Transcript clear.
Transcript show: sum.
或
| x |
x := #(84 45 54 ).
sum := x inject: 0 into: [ :sum :each | each even ifTrue: [sum + each ] ifFalse: [sum + 0]].
Transcript clear.
Transcript show: sum.