mu/lambda-to-mu.mu

61 lines
1.4 KiB
Plaintext
Raw Normal View History

scenario convert-dataflow [
run [
local-scope
1:address:array:character/raw <- lambda-to-mu [(add a (multiply b c))]
2:array:character/raw <- copy *1:address:array:character/raw
]
memory-should-contain [
2:array:character <- [t1 <- multiply b c
result <- add a t1]
]
]
container cell [
first:address:cell-value
rest:address:cell
]
exclusive-container cell-value [
atom:address:array:character
cell:address:cell
]
def new-atom name:address:array:character -> result:address:cell [
local-scope
load-ingredients
cv:address:cell-value <- new cell-value:type
*cv <- merge 0/tag:atom, name
result <- new cell:type
*result <- merge cv, 0/rest
]
def new-cell a:address:cell, b:address:cell -> result:address:cell [
local-scope
load-ingredients
cv:address:cell-value <- new cell-value:type
*cv <- merge 1/tag:cell, a
result <- new cell:type
*result <- merge cv/first, b/rest
]
def is-atom? x:address:cell -> result:boolean [
reply-unless x, 0/false
cv:address:cell-value <- get *x, first:offset
reply-unless cv, 0/false
_, result <- maybe-convert *cv, atom:variant
]
def is-cell? x:address:cell -> result:boolean [
reply-unless x, 0/false
cv:address:cell-value <- get *x, first:offset
reply-unless cv, 0/false
_, result <- maybe-convert *cv, atom:variant
]
def lambda-to-mu in:address:array:character -> out:address:array:character [
local-scope
load-ingredients
tmp <- parse in
out <- to-mu tmp
]