15

我花了很多时间寻找一种可以无缝访问 Java 遗留代码(Weka 代码)的函数式语言。导入的 Java 类方法的自动完成将非常好。我将介绍我的印象,如果我错了,请纠正我。

Yeti对我​​很有吸引力,因为它简单且类似于 ML,但我无法为它设置一个好的 IDE。我也不知道语言本身是否已经可以在现实生活中使用。

GroovyJRubyJython看起来非常成熟,但并不是真正的功能。 Scala是成熟的,但也是面向对象的,至少在 Netbeans(如果我没记错的话,还有 Eclipse)上它是错误的。

OCaML-Java ”也是面向对象的,还没有准备好使用(3 或 4 个单独的项目)。我想在 IDE 中它甚至更难以使用。

贾斯凯尔似乎已经死了。

Clojure看起来很成熟,并且在 Intellij IDEA(La Clojure 插件)中运行良好,但我不确定我是否想在编码时每行编写超过 2 个括号。

SISCABCL我没试过。我认为没有IDE支持。

CAL(或 Quark ... Blah ...)语言通向一个 SAP 站点,之后我对功能性 JVM 语言的耐心搜索结束了。

有类似的问题,但并不全面。例如: 哪种函数式编程语言在 Eclipse 中提供最好的支持?

是否缺少一些能够直接调用 java 类的 JVM 功能语言?如果Yeti像Clojure (在 IDEA 中)那样支持 IDE ,那对我来说将是完美的。

谢谢

编辑 - - - - - - - - - - - - - - - - - -

我可以在 Intellij IDEA 中使用 Clojure+Scala。互操作性示例:

斯卡拉代码

package a
class ScalaMain {
  def test = {
    "testing!"
  }
}

Clojure 代码

(import '(a ScalaMain)) ;'
(def scalainstance (new ScalaMain))
(print "printing: " (. scalainstance test))

壮观!

4

4 回答 4

10

Scala + eclipse IDE(最新版本)http://www.scala-ide.org/似乎越来越好。IntellijIDEA 插件也是如此。现在有很多人/公司使用 Scala 开发......我不认为他们都只使用文本编辑器。

我认为目前最多的 FP 语言是 Scala(多范式)和 Clojure(纯函数式) Scala 作为 OO 有什么问题?

你可以期待像 Kotlin 和 Ceylon 这样的新语言也有功能特性,但它们也将是 OO,所以我认为你现在唯一的选择是在 Scala 和 Clojure 之间。

从您的列表中,您缺少 Fantom 语言。它也有功能特性,但我认为它缺乏 IDE 支持(或者至少它没有更新到最新版本)

更新:现在有一个基于 Eclipse 的 Fantom 编程语言的 IDE,看起来非常不错。你可以在这里找到它:http ://www.xored.com/products/f4/

于 2011-07-28T10:25:11.830 回答
4

Clojure 在 java 互操作性 + 函数式 + 具有 lisp 的优势方面非常出色。尽管其他 IDE 支持 clojure ,但 emacs 工作得非常好,只是它需要时间来学习和习惯 emacs 的编码方式。

于 2011-07-29T04:21:21.737 回答
2

Clojure 的互操作故事非常棒。clojure 的一个主要优点是它的集合都实现了 Java 集合 API 中的接口,只要 Java 代码没有,您就不必调整 Clojure 集合或将它们复制到 Java 集合以将它们传递给 Java 代码修改它们的内容。反之亦然,Java 集合可以与许多有用的 Clojure 函数一起使用,例如map reduce filter等等……我知道有人因为这个原因放弃了 Scala 转而使用 Clojure。

在 Clojure 中编写 Java 互操作代码也很容易,它使用的括号比在等效 Java 代码中使用的更少。

例如

blondie.callMe().callMe().any().any().time();

(-> blondie .callMe .callMe .any .any .time)

这需要一些时间来适应,但如果你仔细想想,它并没有那么不同。比较下面这行 Java 代码和 Clojure,我想你都会明白的。

System.out.println("Hello World");

(println "Hello World")

不考虑 System.out 的限定条件和 Java 示例中的附加分号,唯一真正的区别是括号现在位于函数调用的前面。疯话!

它是不同的,但它可能没有您想象的那么糟糕,如果您尝试一下,您可能会发现该语言具有令人信服的好处。如果您需要 IDE 支持,请查看 IntelliJ 中的 LaClojure 或 Netbeans 中的 Enclojure。我知道 Enclojure 提供了很好的补全支持,我认为只有在处理大量 Java 时才真正有用。在 Clojure 中不使用网络执行也可以正常工作。

于 2012-01-15T02:48:44.270 回答
1

Frege 现在还有一个(仍然非常基本的)eclipse 插件

于 2012-01-15T01:55:25.220 回答