[Newbies] Teaching Smalltalk

Samuel Williams space.ship.traveller at gmail.com
Tue May 4 04:53:23 UTC 2010


Thanks John.

I don't know Smalltalk syntax, so I can't make the adjustments myself. It isn't that I don't understand functional programming concepts.

Kind regards,
Samuel

On 4/05/2010, at 4:45 PM, John Foster wrote:

> 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
>> 
> 
> 
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners



More information about the Beginners mailing list