1 ! Copyright (C) 2008 James Cash
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel sequences accessors ;
9 GENERIC: car ( cons -- car )
10 GENERIC: cdr ( cons -- cdr )
11 GENERIC: nil? ( cons -- ? )
17 M: cons car ( cons -- car )
20 M: cons cdr ( cons -- cdr )
26 M: cons nil? ( cons -- bool )
29 : 1list ( obj -- cons )
32 : 2list ( a b -- cons )
35 : 3list ( a b c -- cons )
38 : uncons ( cons -- cdr car )
41 : seq>cons ( seq -- cons )
42 <reversed> nil [ f cons swap >>cdr ] reduce ;
44 : (map-cons) ( acc cons quot -- seq )
46 [ [ uncons ] dip [ call ] keep swapd [ suffix ] 2dip (map-cons) ] if ;
48 : map-cons ( cons quot -- seq )
49 [ { } clone ] 2dip (map-cons) ;
51 : cons>seq ( cons -- array )
54 : reduce-cons ( cons identity quot -- result )
55 pick nil? [ drop nip ]
56 [ [ uncons ] 2dip swapd [ call ] keep reduce-cons ] if ;