Skip to content

Instantly share code, notes, and snippets.

@jamesmacaulay
Created September 28, 2011 15:36
Show Gist options
  • Save jamesmacaulay/1248252 to your computer and use it in GitHub Desktop.
Save jamesmacaulay/1248252 to your computer and use it in GitHub Desktop.
class Batman.Cons extends Batman.Object
@accessor (key) ->
return unless key.match(/^c[ad][ad]+r$/)
@get("c#{key[1]}r.c#{key[2..key.length-2]}r")
@accessor 'car', -> @car
@accessor 'cdr', -> @cdr
constructor: (@car, @cdr) ->
class Batman.Stream extends Batman.Cons
@accessor 'cdr', -> @cdrFunction()
constructor: (@car, @cdrFunction) ->
QUnit.module 'Batman.Stream'
test "a stream of fibonacci numbers", ->
fibgen = (a,b) -> new Batman.Stream a, -> fibgen(b, a+b)
fibs = fibgen(0,1)
equal fibs.get('car'), 0
equal fibs.get('cdr.car'), 1
equal fibs.get('cdr.cdr.car'), 1
# backwards from lisp because property access goes left-to-right:
equal fibs.get('cdddar'), 2
equal fibs.get('cddddar'), 3
equal fibs.get('cdddddar'), 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment