Moving cons stuff into its own sub-vocab

db4
James Cash 2008-06-02 01:26:10 -04:00
parent f0fdac5b7d
commit c65e299e8c
9 changed files with 48 additions and 15 deletions

View File

@ -0,0 +1 @@
James Cash

View File

View File

@ -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

View File

@ -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) ;

View File

@ -0,0 +1 @@
Cons cell helper functions for extra/lisp

View File

@ -0,0 +1,4 @@
lisp
cons
lists
sequences

View File

@ -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

View File

@ -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

View File

@ -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 = "("