lazy-lists: add lazy reading of characters from a file
parent
6bd500c34b
commit
509b0fc588
|
@ -0,0 +1,34 @@
|
|||
! Copyright (C) 2006 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
|
||||
USING: kernel lazy-lists io ;
|
||||
IN: lazy-lists
|
||||
|
||||
TUPLE: lazy-contents stream car cdr ;
|
||||
|
||||
: lcontents ( stream -- result )
|
||||
f f <lazy-contents> ;
|
||||
|
||||
M: lazy-contents car ( lazy-contents -- car )
|
||||
dup lazy-contents-car dup [
|
||||
nip
|
||||
] [
|
||||
drop dup lazy-contents-stream stream-read1
|
||||
swap dupd set-lazy-contents-car
|
||||
] if ;
|
||||
|
||||
M: lazy-contents cdr ( lazy-contents -- cdr )
|
||||
dup lazy-contents-cdr dup [
|
||||
nip
|
||||
] [
|
||||
drop dup
|
||||
[ lazy-contents-stream ] keep
|
||||
car [
|
||||
lcontents [ swap set-lazy-contents-cdr ] keep
|
||||
] [
|
||||
2drop nil
|
||||
] if
|
||||
] if ;
|
||||
|
||||
M: lazy-contents nil? ( lazy-contents -- bool )
|
||||
car not ;
|
|
@ -0,0 +1,10 @@
|
|||
! Copyright (C) 2006 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
|
||||
USING: help lazy-lists sequences ;
|
||||
|
||||
HELP: lcontents
|
||||
{ $values { "stream" "a stream" } }
|
||||
{ $description "Returns a lazy list of all characters in the file. " { $link car } " returns the next character in the file, " { $link cdr } " returns the remaining characters as a lazy list. " { $link nil? } " indicates end of file." }
|
||||
{ $see-also leach lmap ltake lsubset lfrom lfrom-by } ;
|
||||
|
|
@ -4,6 +4,8 @@
|
|||
PROVIDE: contrib/lazy-lists {
|
||||
"lists.factor"
|
||||
"lists.facts"
|
||||
"lazy-io.factor"
|
||||
"lazy-io.facts"
|
||||
"examples.factor"
|
||||
} {
|
||||
"test/lists.factor"
|
||||
|
|
Loading…
Reference in New Issue