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