From c5ffb6e1cc9c5ff880d037c53b8ebc8562be0008 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 25 May 2015 22:27:19 -0700 Subject: 1459 --- html/063list.mu.html | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 html/063list.mu.html (limited to 'html/063list.mu.html') diff --git a/html/063list.mu.html b/html/063list.mu.html new file mode 100644 index 00000000..da699d87 --- /dev/null +++ b/html/063list.mu.html @@ -0,0 +1,97 @@ + + + + +063list.mu + + + + + + + + + + +
+# A list links up multiple objects together to make them easier to manage.
+#
+# Try to make all objects in a single list of the same type, it'll help avoid bugs.
+# If you want to store multiple types in a single list, use an exclusive-container.
+
+container list [
+  value:location
+  next:address:list
+]
+
+# result:address:list <- push x:location, in:address:list
+recipe push [
+  default-space:address:array:location <- new location:type, 30:literal
+  x:location <- next-ingredient
+  in:address:list <- next-ingredient
+  result:address:list <- new list:type
+  val:address:location <- get-address result:address:list/deref, value:offset
+  val:address:location/deref <- copy x:location
+  next:address:address:list <- get-address result:address:list/deref, next:offset
+  next:address:address:list/deref <- copy in:address:list
+  reply result:address:list
+]
+
+# result:location <- first in:address:list
+recipe first [
+  default-space:address:array:location <- new location:type, 30:literal
+  in:address:list <- next-ingredient
+  result:location <- get in:address:list/deref, value:offset
+  reply result:location
+]
+
+# result:address:list <- rest in:address:list
+recipe rest [
+  default-space:address:array:location <- new location:type, 30:literal
+  in:address:list <- next-ingredient
+  result:address:list <- get in:address:list/deref, next:offset
+  reply result:address:list
+]
+
+scenario list-handling [
+  run [
+#?     $start-tracing #? 1
+    1:address:list <- copy 0:literal
+    1:address:list <- push 3:literal, 1:address:list
+    1:address:list <- push 4:literal, 1:address:list
+    1:address:list <- push 5:literal, 1:address:list
+    2:number <- first 1:address:list
+    1:address:list <- rest 1:address:list
+    3:number <- first 1:address:list
+    1:address:list <- rest 1:address:list
+    4:number <- first 1:address:list
+    1:address:list <- rest 1:address:list
+  ]
+  memory-should-contain [
+    1 <- 0  # empty to empty, dust to dust..
+    2 <- 5
+    3 <- 4
+    4 <- 3
+  ]
+]
+
+ + + -- cgit 1.4.1-2-gfad0