逻辑语言 - Prolog或Lisp / Smalltalk还是其他什么?

时间:2009-01-02 10:05:58

标签: statistics lisp prolog

所以,我正在编写某种统计程序(实际上我正在将它重新设计为更优雅的东西)并且我认为我应该使用为这种东西创建的语言(处理大量的统计数据,连接他们之间和某种遗传/神经编程)。

说实话,我只是想借口潜入lisp / smalltalk(不是smalltalk / lisp / clojure一样吗? - 像python和ruby? - 语义明智)但我也想要一种语言很容易被其他喜欢BASIC语言的人所理解(这就是为什么我没有选择LISP - 但是:D)。

我还检查了Prolog,它似乎是一种非常酷的语言(容易在数据之间建立关系,比Lisp更容易),但我想听听你的想法。

THX

编辑: 我总是把常见的lisp与Smalltalk混为一谈。很抱歉把这两个郎放在一起。我所说的“其他喜欢BASIC语言的人”的意思是我不喜欢像lisp一样的语言语言(对于没有CS背景的人)而且我发现Prolog有点更直观一点(但在我和他们两个人搞砸之后,这是我的意见)。

5 个答案:

答案 0 :(得分:10)

是否有任何特殊原因不使用R?这是一种构建与购买(或在本例中为下载)的决定。如果你正在进行统计计算,那么R就有many packages现成的。这些包括用于各种类型数据源的许多库和接口。还有用于在其他语言such as Python,中嵌入R的接口库,因此您可以使用GUI in Python (for example)和使用R的核心计算引擎构建混合应用程序。

在这种情况下,您可以减少实施所需的工作量,并使用更灵活的应用程序。

如果你已经全心全意地学习另一种语言,那就去做吧。 Smalltalk, PrologLISP.

有几个好的免费(一些在演讲中,一些在啤酒中)。

如果您在系统上放置用户界面,Smalltalk可能是更好的选择。如果要将大型规则集创建为应用程序的一部分,Prolog就是为此类设计的。各种各样的人written about the LISP ephiphany影响了你对编程的看法,但我无法从经验中证实这一点 - 我只是真的使用AutoLISP在AutoCAD上编写自动化脚本。

答案 1 :(得分:8)

冒着冒犯别人的风险,我很难用你提到的任何一种语言来协调“很容易被其他喜欢BASIC语言的人”。这是意图作为批评,但作为观察,你提到的每种语言都有一种与BASIC完全不同的风格和自然习语。

  • Smalltalk - 从头开始​​的纯OO,通常(例如Squeak)与同时是IDE和运行时的集成环境相结合。如果你进入Smalltalk VM并在其中工作 而不是只写一个“源代码”的文本。

  • LISP - 更接近函数式编程(虽然有强制性的泛音);前缀表示法是大多数“喜欢”其他语言的人的第一道屏障,但宏的概念和使用是一个更为重要的。

  • Clojure - LISP,OO和JVM集成的结合使得它更像BASIC。

  • Python和Ruby - 我把它们混为一谈(冒着进一步讨厌的粉丝的风险;-)因为它们都是OO语言,带有不同的符号,会让局外人有点学习曲线。在Python中使用缩进仅用于控制嵌套以及在Ruby中使用类似Perl的特殊字符通常是新手的抱怨点。虽然两者都可以用命令式的方式编写,但经验丰富的用户认为这种方式不合标准。

  • Prolog - 这与所提到的所有语言的BASIC最不同。您提到的所有其他语言都可以(ab)以半过程的方式使用,但这在Prolog中基本上是不可能的。它需要彻底了解和安慰递归,以做任何不平凡的事情。

基本上所有这些语言(但特别是Prolog,恕我直言)用“本地口音”编写的代码将使用超出常规BASIC编程规范的习语和概念。换句话说,如果您选择其中一个然后编写“带有基本重音”的代码,那么您几乎浪费了该语言可以带来的好处。

我相信所有这些都值得学习他们可以教授的概念(或者至少根据你的背景加强)。但是与语言X(对于X的各种值)的相似性并不是你得到的。

答案 2 :(得分:3)

我可以部分回答你

  

(不是Smalltalk / Lisp / Clojure相同吗? - 像python和ruby? - 语义明智)

不,不是。 Smalltalk是OO语言,带有消息传递而不是方法调用。 Lisp是Lisp ;-)它意味着真正的功能语言,具有强大的宏系统,OO支持,这是其他语言(在CL中)从未见过的以及更多功能。 Closure是类似Lisp的语言,没有很多Lisp功能,但与JVM的良好集成。例如,它不支持尾调用优化。 python或ruby是经典的命令式OO语言,具有一些有限的功能。注意字有限。例如,Guido不喜欢函数式编程,并删除了版本2.5和2.6中的一些功能。

如果你熟悉Python中的命令式程序编程,并且想要改变你的范例,你应该仔细做出决定。

答案 3 :(得分:2)

Prolog是一种非常不同的语言。它可能很难掌握,主要是因为它非常依赖递归来完成非常基本的任务。如果你真的愿意那就试试吧。它可以非常强大,因为它可以简单地解决关系并解决复杂问题,典型的例子是河内塔或快速入口。它将改变你的思维方式,如果你习惯于命令式语言,那将会很困难。

答案 4 :(得分:0)

如果您对Prolog感兴趣,那么可以使用Visual Prolog的免费版本,商业版的价格合理。

这是Prolog的一个强大类型的分支,所以不是你经典的语言实现,但有一个可敬的历史--Borland在80年代后期作为Turbo-Prolog推销它的DOS祖先。

它也只是Windows,但可用于创建标准Windows DLL,因此您可以将代码链接到“普通”Windows编程语言。我自己从来没有使用过这个包,但是我在Uni做了几个Prolog课程,所以不时下载它并寻找可能的用途,它看起来足够坚固。可能只是你正在寻找的一组齿轮。