Looking at rosettacode <http://rosettacode.org/wiki/100_doors> most languages look nearly identical (or, at the very least, ugly/crappy) when written out procedurely so that one might end up deciding to just stick with C.
I know I am going off the deep end a bit, but the whole answer to "why Smalltalk?" lies in the fact that problems should/would be approached in a completely different manner. As I am sure they would in most of the other languages if one were not restricted to 20 or so lines of code. Since it is example code, at least in the case of Smalltalk, an object oriented solution would be in order - i.e. show how it would be solved using "everything is an object". Unfortunately, it doesn't really fit into "a few lines of code" to display on a page (even though the classes/objects and code required to implement them is little more than a few lines). And you also don't get any feel for the great tools. Perhaps, some insight into how one would run the code in Java/Eclipse, or Visual C <chuckle> with all the includes and project setup, etc might be a useful addition to the comparisons... Object subclass: #Corridor instanceVariableNames: 'doors count' classVariableNames: '' poolDictionaries: '' category: '100Doors' initialize: anInteger "initialize the receiver with the given number of doors" count := anInteger. doors := OrderedCollection new. anInteger timesRepeat: [ doors add: Door new ] pass "iterate over the doors" 1 to: count do: [ :i | self passBy: i ] passBy: anInteger "if the nth door is open close it otherwise open it" doors by: anInteger do: [ :door | door toggle ] printOn: aStream "print the open doors" aStream cr. doors withIndexDo: [ :door :i | door isOpen ifTrue: [ aStream nextPutAll: i asString, ' is open'; cr ]] Corridor class pass: anInteger "return a new Corridor with the given number of doors that has been passed thru" ^self new initialize: anInteger; pass ================================================================== Object subclass: #Door instanceVariableNames: 'isOpen' classVariableNames: '' poolDictionaries: '' category: '100Doors' isOpen "Answer the value of isOpen" ^ isOpen toggle "if the receiver is open close it else open it" isOpen := isOpen not initialize "initialize the receiver to be closed" super initialize. isOpen := false =========================================================== Patch to iterate over a collection by each nth item OrderedCollection>>by: anInteger do: aBlock | index | index := anInteger. [index <= lastIndex] whileTrue: [aBlock value: (array at: index). index := index + anInteger] Probably silly for the problem given but just my 2 cents John -- http://john-mckeon.us/seaside
_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners