]> gitweb.factorcode.org Git - factor.git/commitdiff
lists.circular: new vocab
authorAlexander Ilin <alex.ilin@protonmail.com>
Tue, 10 May 2022 07:54:37 +0000 (09:54 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 10 May 2022 15:39:36 +0000 (08:39 -0700)
Closes #2607.

extra/lists/circular/authors.txt [new file with mode: 0644]
extra/lists/circular/circular-docs.factor [new file with mode: 0644]
extra/lists/circular/circular-tests.factor [new file with mode: 0644]
extra/lists/circular/circular.factor [new file with mode: 0644]
extra/lists/circular/summary.txt [new file with mode: 0644]
extra/lists/circular/tags.txt [new file with mode: 0644]

diff --git a/extra/lists/circular/authors.txt b/extra/lists/circular/authors.txt
new file mode 100644 (file)
index 0000000..8e1955f
--- /dev/null
@@ -0,0 +1 @@
+Alexander Ilin
diff --git a/extra/lists/circular/circular-docs.factor b/extra/lists/circular/circular-docs.factor
new file mode 100644 (file)
index 0000000..2476536
--- /dev/null
@@ -0,0 +1,9 @@
+! 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 } "." ;
diff --git a/extra/lists/circular/circular-tests.factor b/extra/lists/circular/circular-tests.factor
new file mode 100644 (file)
index 0000000..a85ea0b
--- /dev/null
@@ -0,0 +1,23 @@
+! 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
diff --git a/extra/lists/circular/circular.factor b/extra/lists/circular/circular.factor
new file mode 100644 (file)
index 0000000..48ae7c5
--- /dev/null
@@ -0,0 +1,8 @@
+! 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 ;
diff --git a/extra/lists/circular/summary.txt b/extra/lists/circular/summary.txt
new file mode 100644 (file)
index 0000000..f4ce39a
--- /dev/null
@@ -0,0 +1 @@
+Circular sequences as infinite linked lists
diff --git a/extra/lists/circular/tags.txt b/extra/lists/circular/tags.txt
new file mode 100644 (file)
index 0000000..42d711b
--- /dev/null
@@ -0,0 +1 @@
+collections