61 lines
1.4 KiB
Plaintext
61 lines
1.4 KiB
Plaintext
|
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
|
||
|
]
|