Fixing bug in nil?

db4
James Cash 2008-06-05 14:31:15 -04:00
parent 520fc019cc
commit c901734689
1 changed files with 6 additions and 8 deletions

View File

@ -72,7 +72,7 @@ M: memoized-cons cdr ( memoized-cons -- cdr )
M: memoized-cons nil? ( memoized-cons -- bool ) M: memoized-cons nil? ( memoized-cons -- bool )
dup nil?>> not-memoized? [ dup nil?>> not-memoized? [
dup original>> nil? [ >>nil? drop ] keep dup original>> nil? [ >>nil? drop ] keep
] [ ] [
nil?>> nil?>>
] if ; ] if ;
@ -157,22 +157,20 @@ TUPLE: lazy-filter cons quot ;
C: <lazy-filter> lazy-filter C: <lazy-filter> lazy-filter
: lfilter ( list quot -- result ) : lfilter ( list quot -- result )
over nil? [ 2drop nil ] [ <lazy-filter> <memoized-cons> ] if ; over nil? [ 2drop nil ] [ <lazy-filter> <memoized-cons> ] if ;
: car-filter? ( lazy-filter -- ? ) : car-filter? ( lazy-filter -- ? )
[ cons>> car ] keep [ cons>> car ] [ quot>> ] bi call ;
quot>> call ;
: skip ( lazy-filter -- ) : skip ( lazy-filter -- )
dup cons>> cdr >>cons ; dup cons>> cdr >>cons drop ;
M: lazy-filter car ( lazy-filter -- car ) M: lazy-filter car ( lazy-filter -- car )
dup car-filter? [ cons>> ] [ dup skip ] if car ; dup car-filter? [ cons>> ] [ dup skip ] if car ;
M: lazy-filter cdr ( lazy-filter -- cdr ) M: lazy-filter cdr ( lazy-filter -- cdr )
dup car-filter? [ dup car-filter? [
[ cons>> cdr ] keep [ cons>> cdr ] [ quot>> ] bi lfilter
quot>> lfilter
] [ ] [
dup skip cdr dup skip cdr
] if ; ] if ;