Yan*_*Yin 14 lisp haskell functional-programming genetic-programming
这对于遗传编程很有用,遗传编程通常使用Lisp子集作为程序的表示.
我在网上找到了一个名为Liskell(Lisp语法,Haskell里面)的东西,但链接坏了,我找不到它上面的文件......
Jon*_*ran 15
查看Lisk,它旨在解决作者对Liskell的抱怨.
在业余时间,我正在开展一个名为Lisk的项目.使用GHC的-pgmF选项,您可以为GHC提供一个程序名称,该名称在GHC编译之前被调用以预处理该文件.它也适用于GHCi和进口.你这样使用它:
Run Code Online (Sandbox Code Playgroud){-# OPTIONS -F -pgmF lisk #-} (module fibs (import system.environment) (:: main (io ())) (= main (>>= get-args (. print fib read head))) (:: test (-> :string (, :int :string))) (= test (, 1)) (:: fib (-> :int :int)) (= fib 0 0) (= fib 1 1) (= fib n (+ (fib (- n 1)) (fib (- n 2)))))
来源就在这里.
另外,如果你实际上并不关心Haskell而只是想要它的一些功能,你可能想看看Qi(或其继承者Shen),它具有s表达式语法,具有许多类似于Haskell的现代函数编程特性.
显而易见的答案是“是”——这并不奇怪,因为 S 表达式的目的是作为解析代码的简单且统一的表示。问题是像 Haskell 或 ML 这样的语言往往会出现一些问题。我曾经做过一些类似于 OCaml 的事情(滥用 CamlP4 并编写了一些函数,将 P4 AST 转换为某种类似 sexpr 的表示),当您遇到具有不同类型的类似 AST 节点时,乐趣就开始了,因为它们并不是真正的相同...例如,有函数应用程序,有一种类似的形式用于模式,还有另一种形式用于类型表达式。
我的猜测是,尝试以这种方式进行遗传编程很可能会遇到太多没有任何意义的垃圾程序。但这对于任何静态类型语言来说也不足为奇——动态类型语言将允许更多垃圾进入。出于人工智能之外的原因,将这两个世界的 WRT 与遗传编程进行比较可能会很有趣......