lazy-lists: add lazy reading of characters from a file

chris.double 2006-09-17 23:59:06 +00:00
parent 6bd500c34b
commit 509b0fc588
3 changed files with 46 additions and 0 deletions

View File

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

View File

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

View File

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