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 {
|
PROVIDE: contrib/lazy-lists {
|
||||||
"lists.factor"
|
"lists.factor"
|
||||||
"lists.facts"
|
"lists.facts"
|
||||||
|
"lazy-io.factor"
|
||||||
|
"lazy-io.facts"
|
||||||
"examples.factor"
|
"examples.factor"
|
||||||
} {
|
} {
|
||||||
"test/lists.factor"
|
"test/lists.factor"
|
||||||
|
|
Loading…
Reference in New Issue