From 298f8065857630e414d84e4ee785a6d17e5f99bb Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 5 Jul 2016 01:08:00 -0700 Subject: 3102 --- html/074list.mu.html | 148 --------------------------------------------------- 1 file changed, 148 deletions(-) delete mode 100644 html/074list.mu.html (limited to 'html/074list.mu.html') diff --git a/html/074list.mu.html b/html/074list.mu.html deleted file mode 100644 index 5154783c..00000000 --- a/html/074list.mu.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - -Mu - 074list.mu - - - - - - - - - - -
-# A list links up multiple objects together to make them easier to manage.
-#
-# The objects must be of the same type. If you want to store multiple types in
-# a single list, use an exclusive-container.
-
-container list:_elem [
-  value:_elem
-  next:address:list:_elem
-]
-
-def push x:_elem, in:address:list:_elem -> result:address:list:_elem [
-  local-scope
-  load-ingredients
-  result <- new {(list _elem): type}
-  *result <- merge x, in
-]
-
-def first in:address:list:_elem -> result:_elem [
-  local-scope
-  load-ingredients
-  result <- get *in, value:offset
-]
-
-def rest in:address:list:_elem -> result:address:list:_elem/contained-in:in [
-  local-scope
-  load-ingredients
-  result <- get *in, next:offset
-]
-
-scenario list-handling [
-  run [
-    local-scope
-    x:address:list:number <- push 3, 0
-    x <- push 4, x
-    x <- push 5, x
-    10:number/raw <- first x
-    x <- rest x
-    11:number/raw <- first x
-    x <- rest x
-    12:number/raw <- first x
-    20:address:list:number/raw <- rest x
-  ]
-  memory-should-contain [
-    10 <- 5
-    11 <- 4
-    12 <- 3
-    20 <- 0  # nothing left
-  ]
-]
-
-def length l:address:list:_elem -> result:number [
-  local-scope
-  load-ingredients
-  return-unless l, 0
-  rest:address:list:_elem <- rest l
-  length-of-rest:number <- length rest
-  result <- add length-of-rest, 1
-]
-
-def to-text in:address:list:_elem -> result:address:array:character [
-  local-scope
-  load-ingredients
-  buf:address:buffer <- new-buffer 80
-  buf <- to-buffer in, buf
-  result <- buffer-to-array buf
-]
-
-# variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)
-def to-text-line in:address:list:_elem -> result:address:array:character [
-  local-scope
-  load-ingredients
-  buf:address:buffer <- new-buffer 80
-  buf <- to-buffer in, buf, 6  # max elements to display
-  result <- buffer-to-array buf
-]
-
-def to-buffer in:address:list:_elem, buf:address:buffer -> buf:address:buffer [
-  local-scope
-  load-ingredients
-  {
-    break-if in
-    buf <- append buf, 48/0
-    return
-  }
-  # append in.value to buf
-  val:_elem <- get *in, value:offset
-  buf <- append buf, val
-  # now prepare next
-  next:address:list:_elem <- rest in
-  nextn:number <- copy next
-  return-unless next
-  buf <- append buf, [ -> ]
-  # and recurse
-  remaining:number, optional-ingredient-found?:boolean <- next-ingredient
-  {
-    break-if optional-ingredient-found?
-    # unlimited recursion
-    buf <- to-buffer next, buf
-    return
-  }
-  {
-    break-unless remaining
-    # limited recursion
-    remaining <- subtract remaining, 1
-    buf <- to-buffer next, buf, remaining
-    return
-  }
-  # past recursion depth; insert ellipses and stop
-  append buf, [...]
-]
-
- - - -- cgit 1.4.1-2-gfad0