diff --git a/contrib/lazy-lists/lazy-io.factor b/contrib/lazy-lists/lazy-io.factor new file mode 100644 index 0000000000..b24e0424a9 --- /dev/null +++ b/contrib/lazy-lists/lazy-io.factor @@ -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 ; + +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 ; \ No newline at end of file diff --git a/contrib/lazy-lists/lazy-io.facts b/contrib/lazy-lists/lazy-io.facts new file mode 100644 index 0000000000..595887b2d9 --- /dev/null +++ b/contrib/lazy-lists/lazy-io.facts @@ -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 } ; + diff --git a/contrib/lazy-lists/load.factor b/contrib/lazy-lists/load.factor index 967d22525c..536d2c1ae5 100644 --- a/contrib/lazy-lists/load.factor +++ b/contrib/lazy-lists/load.factor @@ -4,6 +4,8 @@ PROVIDE: contrib/lazy-lists { "lists.factor" "lists.facts" + "lazy-io.factor" + "lazy-io.facts" "examples.factor" } { "test/lists.factor"