14

这对于遗传编程很有用,遗传编程通常使用 Lisp 子集作为程序的表示。

我在网上找到了一个叫做 Liskell(Lisp 语法,里面有 Haskell)的东西,但是链接坏了,我在上面找不到论文……

4

5 回答 5

15

查看Lisk,它旨在解决作者对 Liskell 的不满。

在业余时间,我正在开发一个名为 Lisk 的项目。使用 GHC 的 -pgmF 选项,您可以为 GHC 提供一个程序名称,在 GHC 编译文件之前调用该程序名称来预处理文件。它也适用于 GHCi 和导入。你像这样使用它:

{-# 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 的现代函数式编程功能.

于 2011-06-02T02:53:24.717 回答
6

你可能对我一直在做的一个项目感兴趣,外壳计划

基本上它会让你从 Haskell 调用 Scheme 代码(S 表达式),反之亦然。因此,您可以在程序中混合该代码,然后当您想在 Haskell 端做某事时,将 s 表达式作为本地 Haskell 数据类型处理。

无论如何,它可能对您有用,也可能没有 - 看看并自己决定。

于 2011-06-02T03:01:22.533 回答
3

In most genetic programming software, programs are represented as abstract syntax trees (AST) which are evaluated directly in that form. The Lisp S-expression syntax is only apparent when the programs are output as source code. Have you considered just modifying the output module in your chosen software to produce Haskell source code from the ASTs instead?

于 2011-06-02T10:24:13.433 回答
3

显而易见的答案是“是”——鉴于 S 表达式旨在作为已解析代码的简单且统一的表示形式,这不足为奇。问题是像 Haskell 或 ML 这样的语言往往会遇到一些问题。我曾经做过类似于 OCaml 的事情(滥用 CamlP4 并编写了一些函数,将 P4 AST 转换为一些类似 sexpr 的表示),当您遇到具有不同类型的类似 AST 节点时,乐趣就开始了,因为它们不是真的同样...例如,有函数应用程序,并且有一种类似的形式用于模式,还有另一种形式用于类型表达式。

我的猜测是,尝试以这种方式进行基因编程很可能会遭受太多没有任何意义的垃圾程序的影响。但这对于任何静态类型的语言来说也不足为奇——动态类型的语言将允许更多的垃圾进入。将两个世界 WRT 与遗传编程进行比较可能会很有趣,因为人工智能之外的原因......

于 2011-06-02T02:48:45.127 回答
3

Liskell 论文位于http://clemens.endorphin.org/ILC07-Liskell-draft.pdf并且 liskell.org 网站似乎总体上仍然正常。

于 2011-06-02T03:01:05.560 回答