--- /dev/null
+! Copyright (C) 2022 Alexander Ilin.
+! See http://factorcode.org/license.txt for BSD license.
+USING: arrays circular help.markup help.syntax lists lists.lazy ;
+IN: lists.circular
+
+ABOUT: "lists.circular"
+
+ARTICLE: "lists.circular" "Circular lists"
+"The " { $vocab-link "lists.circular" } " vocabulary implements virtually infinite linked lists based on the " { $link circular } " sequences. These are especially useful when used lazily (" { $vocab-link "lists.lazy" } "), see " { $link ltake } ", just don't call " { $link llength } "." ;
--- /dev/null
+! Copyright (C) 2022 Alexander Ilin.
+! See http://factorcode.org/license.txt for BSD license.
+USING: circular lists lists.circular lists.lazy sequences tools.test ;
+
+{ { f f "Fizz" f f "Fizz" f f "Fizz" } } [
+ 9 { f f "Fizz" } <circular> ltake list>array
+] unit-test
+
+{ { f f f f "Buzz" f f f f "Buzz" f f f f "Buzz" } } [
+ 15 { f f f f "Buzz" } <circular> ltake list>array
+] unit-test
+
+{ {
+ "" "" "Fizz" "" "Buzz"
+ "Fizz" "" "" "Fizz" "Buzz"
+ "" "Fizz" "" "" "FizzBuzz"
+} } [
+ 15
+ { "" "" "Fizz" } <circular>
+ { "" "" "" "" "Buzz" } <circular>
+ lzip [ first2 append ] lmap-lazy
+ ltake list>array
+] unit-test
--- /dev/null
+! Copyright (C) 2022 Alexander Ilin.
+! See http://factorcode.org/license.txt for BSD license.
+USING: circular kernel lists sequences ;
+IN: lists.circular
+
+M: circular car 0 swap nth ;
+
+M: circular cdr [ rotate-circular ] keep ;