Haskell程序可以表示为Lisp S表达式吗?

时间:2011-06-02 02:17:17

标签: haskell functional-programming lisp genetic-programming

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

我在网上找到了一个名为Liskell(Lisp语法,Haskell里面)的东西,但链接坏了,我找不到它上面的文件......

5 个答案:

答案 0 :(得分: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)))))

来源为here

此外,如果您实际上并不关心Haskell并且只是想要它的某些功能,那么您可能需要查看Qi(或其继承者Shen),它具有s-expression具有许多类似于Haskell的现代函数编程特性的语法。

答案 1 :(得分:6)

您可能对我一直在进行的项目husk scheme感兴趣。

基本上它会让你从Haskell调用Scheme代码(S表达式),反之亦然。因此,您可以将该代码混合到程序中,然后在希望在Haskell端执行某些操作时将s表达式作为本机Haskell数据类型进行处理。

无论如何,它可能对你有用,或者不是 - 看看并自己决定。

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

Liskell论文位于http://clemens.endorphin.org/ILC07-Liskell-draft.pdf,而liskell.org网站似乎仍然普遍存在。

答案 4 :(得分:3)

在大多数遗传编程软件中,程序表示为抽象语法树(AST),它们以该形式直接评估。只有当程序作为源代码输出时,Lisp S表达式语法才会明显。您是否考虑过只修改所选软件中的输出模块以生成来自AST的Haskell源代码?