(免责声明:我是C#家伙.我刚开始学习Clojure.)
我知道Clojure 程序有能力操纵自己或轻松生成其他程序.它与Clojure中的所有内容有关,它是一种数据结构,生成程序与创建任何其他类型的数据结构相同.
有没有人有一个很好的示例程序(或一个参考)显示这个?
如果生成程序,是否可以将该程序"序列化"到磁盘以供以后执行?
仅供参考:
Bri*_*per 28
考虑(+ 1 2).作为数据,它是三个项目的链表:符号+和两个整数.作为代码,它是一个函数调用,说"调用+用这两个整数作为参数调用的函数并给我结果".您可以对此列表执行任何操作,您可以对任何其他数据列表执行任何操作.你也eval可以得到一个结果.
user> (def x '(+ 1 2))
#'user/x
user> (first x)
+
user> (rest x)
(1 2)
user> (map class x)
(clojure.lang.Symbol java.lang.Integer java.lang.Integer)
user> (reverse x)
(2 1 +)
user> (concat x (rest x))
(+ 1 2 1 2)
user> (eval x)
3
user> (defn foo []
        (let [ops '[+ - * /]               ; SO's lisp-highlighting sucks
              nums (repeatedly #(rand-int 5))
              expr (list* (rand-elt ops) (take 10 nums))]
          (prn expr)
          (prn (eval expr))))
user> (foo)
(+ 4 1 0 3 2 3 4 3 1 2)
23
nil
user> (foo)
(- 1 3 2 2 1 2 1 4 0 1)
-15
nil
| 归档时间: | 
 | 
| 查看次数: | 3335 次 | 
| 最近记录: |