gpt4 book ai didi

clojure - Clojure 中的代码生成

转载 作者:行者123 更新时间:2023-12-03 15:11:42 25 4
gpt4 key购买 nike

(免责声明:我是一个 C# 人。我刚刚开始学习 Clojure。)

我知道 Clojure 程序具有操纵自身或轻松生成其他程序的能力。它与 Clojure 中的所有内容都是数据结构有关,生成程序与创建任何其他类型的数据结构相同。

有没有人有一个很好的示例程序(或对一个程序的引用)来显示这一点?

如果您生成一个程序,您能否将该程序“序列化”到磁盘以供以后执行?

仅供引用:

  • 我正在尝试使用遗传编程。我想生成很多小程序,对它们进行评估,并使用成功的来生成更多的程序。查看更多 herehere .
  • 我想我在这里滥用了术语。我所说的程序实际上是指 clojure 列表,而我所说的代码生成是指“列表生成”。我只需要包含实际函数调用和参数的列表。我需要能够控制这个列表何时被“执行”。
  • 最佳答案

    考虑 (+ 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

    关于clojure - Clojure 中的代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627625/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com