4 - output args now optional

This commit is contained in:
Kartik K. Agaram 2014-07-06 02:06:42 -07:00
parent 8fafaf8982
commit 52cbb73992
2 changed files with 19 additions and 16 deletions

29
mu.arc
View File

@ -12,19 +12,22 @@
(each instr instrs
(unless returned
;? (prn instr)
(let (oarg1 <- op arg1 arg2) instr
;? (prn op)
(case op
loadi
(= memory*.oarg1 arg1)
add
(= memory*.oarg1
(+ memory*.arg1 memory*.arg2))
return
(set returned)
; else user-defined function
(run function*.op)
))))
(let delim (or (pos '<- instr) -1)
(with (oarg (cut instr 0 delim)
op (instr (+ delim 1))
arg (cut instr (+ delim 2)))
;? (prn op)
(case op
loadi
(= (memory* oarg.0) arg.0)
add
(= (memory* oarg.0)
(+ (memory* arg.0) (memory* arg.1)))
return
(set returned)
; else user-defined function
(run function*.op)
)))))
;? (prn "return")
)

View File

@ -16,7 +16,7 @@
(main
(1 <- loadi 1)
(2 <- loadi 3)
(_ <- add-fn))))
(add-fn))))
(run function*!main)
;? (prn memory*)
(if (~iso memory* (obj 1 1 2 3 3 4))
@ -26,12 +26,12 @@
(add-fns
'((add-fn
(3 <- add 1 2)
(_ <- return)
(return)
(4 <- loadi 34))
(main
(1 <- loadi 1)
(2 <- loadi 3)
(_ <- add-fn))))
(add-fn))))
(run function*!main)
;? (prn memory*)
(if (~iso memory* (obj 1 1 2 3 3 4))