- 493 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 10:56:11.26 ]
- F#のスレッドローカル(有り体にはグローバル変数)と同様の方法でSqueak Smalltalkの解。
オープンクラスは使わずにブロック(無名関数)で。 | fb fizz buzz gizz | fb := [:x :cond :str | | p n | p := Processor activeProcess. (x isKindOf: Integer) ifTrue: [p instVarNamed: #env put: (n := x). x := ''] ifFalse: [n := p instVarNamed: #env]. (cond value: n) ifTrue: [x, str] ifFalse: [x ifEmpty: [n]]]. fizz := [:x | fb value: x value: [:n | n isDivisibleBy: 3] value: 'Fizz' ]. buzz := [:x | fb value: x value: [:n | n isDivisibleBy: 5] value: 'Buzz']. gizz := [:x | fb value: x value: [:n | n isDivisibleBy: 7] value: 'Gizz']. self assert: (fizz value: 1) = 1. self assert: (fizz value: 3) = 'Fizz'. self assert: (buzz value: (fizz value: 1)) = 1. self assert: (buzz value: (fizz value: 3)) = 'Fizz'. self assert: (buzz value: (fizz value: 5)) = 'Buzz'. self assert: (buzz value: (fizz value: 15)) = 'FizzBuzz'. self assert: (gizz value: (buzz value: (fizz value: 105))) = 'FizzBuzzGizz'. self assert: (buzz value: (gizz value: (fizz value: 105))) = 'FizzGizzBuzz'.
|

|