Moving cons stuff into its own sub-vocab
parent
f0fdac5b7d
commit
c65e299e8c
|
@ -0,0 +1 @@
|
|||
James Cash
|
|
@ -0,0 +1,13 @@
|
|||
! Copyright (C) 2008 James Cash
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: tools.test lisp.conses math ;
|
||||
|
||||
IN: lisp.conses.tests
|
||||
|
||||
{ { 3 4 5 6 } } [
|
||||
T{ cons f 1
|
||||
T{ cons f 2
|
||||
T{ cons f 3
|
||||
T{ cons f 4
|
||||
T{ cons f f f } } } } } [ 2 + ] map-cons
|
||||
] unit-test
|
|
@ -0,0 +1,26 @@
|
|||
! Copyright (C) 2008 James Cash
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel sequences accessors ;
|
||||
|
||||
IN: lisp.conses
|
||||
|
||||
TUPLE: cons car cdr ;
|
||||
: cons \ cons new ;
|
||||
|
||||
: uncons ( cons -- cdr car )
|
||||
[ cdr>> ] [ car>> ] bi ;
|
||||
|
||||
: null? ( cons -- ? )
|
||||
uncons and not ;
|
||||
|
||||
: <car> ( x -- cons )
|
||||
cons swap >>car ;
|
||||
|
||||
: seq>cons ( seq -- cons )
|
||||
<reversed> cons [ <car> swap >>cdr ] reduce ;
|
||||
|
||||
: (map-cons) ( acc cons quot -- seq )
|
||||
over null? [ 2drop ] [ [ uncons ] dip [ call ] keep swapd [ suffix ] 2dip (map-cons) ] if ;
|
||||
|
||||
: map-cons ( cons quot -- seq )
|
||||
[ { } clone ] 2dip (map-cons) ;
|
|
@ -0,0 +1 @@
|
|||
Cons cell helper functions for extra/lisp
|
|
@ -0,0 +1,4 @@
|
|||
lisp
|
||||
cons
|
||||
lists
|
||||
sequences
|
|
@ -3,12 +3,9 @@
|
|||
USING: kernel peg sequences arrays strings combinators.lib
|
||||
namespaces combinators math locals locals.private accessors
|
||||
vectors syntax lisp.parser assocs parser sequences.lib words quotations
|
||||
fry ;
|
||||
fry lisp.conses ;
|
||||
IN: lisp
|
||||
|
||||
: uncons ( cons -- cdr car )
|
||||
[ cdr>> ] [ car>> ] bi ;
|
||||
|
||||
DEFER: convert-form
|
||||
DEFER: funcall
|
||||
DEFER: lookup-var
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008 James Cash
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: lisp.parser tools.test peg peg.ebnf ;
|
||||
USING: lisp.parser tools.test peg peg.ebnf lisp.conses ;
|
||||
|
||||
IN: lisp.parser.tests
|
||||
|
||||
|
|
|
@ -1,22 +1,13 @@
|
|||
! Copyright (C) 2008 James Cash
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel peg peg.ebnf peg.expr math.parser sequences arrays strings
|
||||
combinators.lib math fry accessors ;
|
||||
combinators.lib math fry accessors lisp.conses ;
|
||||
|
||||
IN: lisp.parser
|
||||
|
||||
TUPLE: lisp-symbol name ;
|
||||
C: <lisp-symbol> lisp-symbol
|
||||
|
||||
TUPLE: cons car cdr ;
|
||||
: cons \ cons new ;
|
||||
|
||||
: <car> ( x -- cons )
|
||||
cons swap >>car ;
|
||||
|
||||
: seq>cons ( seq -- cons )
|
||||
<reversed> cons [ <car> swap >>cdr ] reduce ;
|
||||
|
||||
EBNF: lisp-expr
|
||||
_ = (" " | "\t" | "\n")*
|
||||
LPAREN = "("
|
||||
|
|
Loading…
Reference in New Issue