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

View File

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

View File

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