'From Squeak3.6 of ''6 October 2003'' [latest update: #5424]! Object subclass: #List instanceVariableNames: 'car cdr ' classVariableNames: '' poolDictionaries: '' category: 'Category-Yuki Quiz'! !List methodsFor: 'accessing'! caadr ^ cdr car car! ! !List methodsFor: 'accessing'! caar ^ car car! ! !List methodsFor: 'accessing'! car ^ car! ! !List methodsFor: 'accessing'! car: object car := object! ! !List methodsFor: 'accessing'! cdadr ^ cdr car cdr! ! !List methodsFor: 'accessing'! cdar ^ car cdr! ! !List methodsFor: 'accessing'! cdr ^ cdr! ! !List methodsFor: 'accessing'! cdr: object cdr := object! ! !List methodsFor: 'printing'! printOn: aStream | currCdr | aStream nextPut: $(. aStream print: car. currCdr := cdr. [currCdr isKindOf: List] whileTrue: [ aStream space. aStream print: currCdr car. currCdr := currCdr cdr]. currCdr ifNotNil: [aStream nextPutAll: ' . '; print: currCdr]. aStream nextPut: $)! ! !List class methodsFor: 'instance creation'! cons: carObject with: cdrObject ^ self new car: carObject; cdr: cdrObject; yourself! ! !List class methodsFor: 'instance creation'! with: object ^ List cons: object with: nil! ! !List class methodsFor: 'instance creation'! withAll: collection | list cdr | collection doWithIndex: [ :each :index | index = 1 ifTrue: [cdr := list := List cons: each with: nil] ifFalse: [cdr := (cdr cdr: (List cons: each with: nil)) cdr]]. ^ list! ! !Object methodsFor: 'creation'! dot: object ^ List cons: self with: object! ! !Integer methodsFor: 'mathematical functions'! farey self = 1 ifTrue: [^ List withAll: {0 dot: 1. 1 dot: 1}]. ^ self rec: (self - 1) farey! ! !Integer methodsFor: 'mathematical functions'! rec: series series cdr ifNil: [^ series]. series cdar + series cdadr = self ifTrue: [ ^ series car dot: ((series caar + series caadr dot: series cdar + series cdadr) dot: (self rec: series cdr))]. ^ series car dot: (self rec: series cdr)! !