纯Guile的LP写法[#33]

LP核心不依赖Grove,普通Scheme datum也能声明片段。Guile使用 -L指定LP库所在目录,以下程序的结果为16:

(use-modules (lp core))
(define fragment
  (make-fragment "square" "Square"
    '((define (square x) (* x x)))))
(define plan (make-program "squares" "Squares" (list fragment) '(square)))
(define instance (instantiate-program plan))
((instance-binding instance 'square) 4)
  

缺少原文时使用pretty-print。make-fragment的 #:texts和 #:origins可保存原文与来源,#:requires声明依赖。片段只支持完整define;装配使用共同命名空间,不继承片段声明处的词法binding。