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
|
USING: kernel peg sequences arrays strings combinators.lib
|
||||||
namespaces combinators math locals locals.private accessors
|
namespaces combinators math locals locals.private accessors
|
||||||
vectors syntax lisp.parser assocs parser sequences.lib words quotations
|
vectors syntax lisp.parser assocs parser sequences.lib words quotations
|
||||||
fry ;
|
fry lisp.conses ;
|
||||||
IN: lisp
|
IN: lisp
|
||||||
|
|
||||||
: uncons ( cons -- cdr car )
|
|
||||||
[ cdr>> ] [ car>> ] bi ;
|
|
||||||
|
|
||||||
DEFER: convert-form
|
DEFER: convert-form
|
||||||
DEFER: funcall
|
DEFER: funcall
|
||||||
DEFER: lookup-var
|
DEFER: lookup-var
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 James Cash
|
! Copyright (C) 2008 James Cash
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
IN: lisp.parser.tests
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,13 @@
|
||||||
! Copyright (C) 2008 James Cash
|
! Copyright (C) 2008 James Cash
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel peg peg.ebnf peg.expr math.parser sequences arrays strings
|
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
|
IN: lisp.parser
|
||||||
|
|
||||||
TUPLE: lisp-symbol name ;
|
TUPLE: lisp-symbol name ;
|
||||||
C: <lisp-symbol> lisp-symbol
|
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
|
EBNF: lisp-expr
|
||||||
_ = (" " | "\t" | "\n")*
|
_ = (" " | "\t" | "\n")*
|
||||||
LPAREN = "("
|
LPAREN = "("
|
||||||
|
|
Loading…
Reference in New Issue