[Newbies] Teaching Smalltalk
John Foster
johnps11 at bigpond.com
Tue May 4 04:45:03 UTC 2010
And here we see how someone who doesn't grok smalltalk sees the world. A
closure could work like a function though.
What I'm trying to work out is how to get rid of all the to:by:do: code -
I feel as if it should be possible to use inject:into: to get to the
answer much faster.
John
doorProblem := [ :count |
a := Array new: count withAll: false.
a withIndexDo: [ :each :index |
index to: (a size) by: index do: [:this |
a at: this put: (a at: this) not
]
].
"output"
a withIndexDo: [ :each :index |
each ifTrue: [Transcript show: ('Door ', index asString, ' is
open') ; cr]
].
Transcript show: 'All the rest are closed';cr.
].
doorProblem value: 100.
> Dear David,
>
> Thanks for this.
>
> I'm happy to use idiomatic Scheme concepts.
>
> Are you able to make this a function which can work for n doors?
> Example: http://programming.dojo.net.nz/languages/cpp/index
>
> Kind regards,
> Samuel
>
> On 4/05/2010, at 3:31 PM, David Mitchell wrote:
>
>> Doh! Was only playing with 10 doors. This makes it 100.
>>
>> | count doors |
>> count := 100.
>> "Initialize the array of doors to 0 (closed)"
>> doors := (Array new: count) atAllPut: false.
>>
>> "Process the doors"
>> 1 to: count do:
>> [ :pass |
>> pass to: count by: pass do:
>> [ :door |
>> doors
>> at: door
>> put: (doors at: door) not ] ].
>>
>> "Print out the results"
>> 1 to: count do:
>> [ :n |
>> Transcript
>> show: 'door #', n, ' is ';
>> show: ((doors at: door) ifTrue: [#open] ifFalse: [#closed]);
>> cr]
>> _______________________________________________
>> Beginners mailing list
>> Beginners at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
More information about the Beginners
mailing list