Skip to content

Instantly share code, notes, and snippets.

@ympbyc
Created December 15, 2012 15:10
Show Gist options
  • Save ympbyc/4296165 to your computer and use it in GitHub Desktop.
Save ympbyc/4296165 to your computer and use it in GitHub Desktop.
Kマシンでプリミティブとコンスタントを扱う方法
;((-> (a b (** + a b))) 5 6)
(
(,CLOSURE ((,STOP)))
(,CLOSURE (
(,GRAB a)
(,GRAB b)
(,CLOSURE ((,PRIMITIVE +) (,CONTINUE)))
(,ACCESS a)
(,ACCESS b)))
(,DEFINE +)
(,CLOSURE ((,CONSTANT 5) (,CONTINUE)))
(,CLOSURE ((,CONSTANT 6) (,CONTINUE)))
(,ACCESS +)
(,CONTINUE)
)
;(
; (:= (+ a b) (** + a b))
; (:= (x) 7)
; (+ x 6)
;)
(
(,CLOSURE ((,STOP)))
(,CLOSURE (
(,GRAB a)
(,GRAB b)
(,CLOSURE ((,PRIMITIVE +) (,CONTINUE)))
(,ACCESS a)
(,ACCESS b)
(,CONTINUE)))
(,DEFINE +)
(,CLOSURE ((,CONSTANT 7) (,CONTINUE)))
(,DEFINE x)
(,CLOSURE ((,ACCESS x) (,CONTINUE)))
(,CLOSURE ((,CONSTANT 6) (,CONTINUE)))
(,ACCESS +)
(,CONTINUE)
)
((-> (x) (+ x 2)) 5)
(
(CLOSURE ((HALT)))
(CLOSURE (
(GRAB)
(PRIM +)
(ACCESS 0)
(CONTINUE)))
(DEFINE plus)
(LABEL (
(CONSTANT 5)
(CONTINUE)))
(GRAB)
(CONSTANT 2)
(ACCESS plus)
(ACCESS 0)
(CONTINUE)
)
@ympbyc
Copy link
Author

ympbyc commented Dec 15, 2012

HALTは定数用スタックのcarを返して終了

@ympbyc
Copy link
Author

ympbyc commented Dec 15, 2012

クロージャを値として使えるようにするのがむずい

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment