Python与函数式语言互操作

Python与函数式语言互操作,python,functional-programming,interop,Python,Functional Programming,Interop,我目前的主要编程语言是python。它有很多我喜欢的地方,但我也喜欢函数式语言。不足以在它们中完成整个程序,但对于某些功能来说,这非常适合功能模型 当然.NET在这方面是惊人的,它同时拥有ironpython和F。但是考虑到ironpython对科学python生态系统的支持,上次我检查时,它仍然是不可靠的,.NET对我来说不是一个很好的选择。我对cpython和Haskell之间明显缺乏促进互操作的工具感到有点震惊。它们都是成熟的语言,拥有大量的社区,这对我来说似乎是一个很好的匹配 他们的体系

我目前的主要编程语言是python。它有很多我喜欢的地方,但我也喜欢函数式语言。不足以在它们中完成整个程序,但对于某些功能来说,这非常适合功能模型

当然.NET在这方面是惊人的,它同时拥有ironpython和F。但是考虑到ironpython对科学python生态系统的支持,上次我检查时,它仍然是不可靠的,.NET对我来说不是一个很好的选择。我对cpython和Haskell之间明显缺乏促进互操作的工具感到有点震惊。它们都是成熟的语言,拥有大量的社区,这对我来说似乎是一个很好的匹配

他们的体系结构中是否有什么让他们不兼容的地方,我没有看到,或者这仅仅是一些令人敬畏的东西,仍在等待发生

澄清;有一些半生不熟的项目在那里,但我正在考虑一些类似于令人敬畏的Weave、pycuda或boost的东西。一种自动化interop中所有固有管道的工具,只需几个注释。

指:

他们的架构是否有什么让他们这么做 我错过了一件不太合适的事情,或者这只是一件令人敬畏的事情 是否仍在等待发生

我认为这是关于人们使用这些语言:

没有多少人希望同时使用Haskell和Python

  • 要同时使用这两种语言(liek Haskell和Python),您可以通过C接口或创建两种语言都能使用的协议

    两者都相当先进,限制了能够做到这一点的人数。当然,也会有一些折衷,这使得很难充分利用两种语言的力量

  • 我正在使用Python,虽然我知道一些Haskell,但我不编写它。我对面向对象有点迷恋,告诉我有一天一个问题会让我决定用Haskell比python更好地解决它。这个问题还没有出现,因为我的第一个想法是:我知道如何用Python实现它。我认为其他“专家”也面临这个问题

  • 你开始用一种语言思考。我认为Haskell有一种完全不同的思维方式,它的功能性风格,没有副作用。要进入这种思维,我需要忘记或不使用我的Python知识。在这两种思维方式之间转换需要一些力量


  • 总而言之:因为两种语言不是那么紧密,它们是分开的。两者都很难做到,而且没有很多或简单的方法来实践两者。

    如果不考虑面向对象语言和命令式语言相对于函数式语言的惰性,我认为对这个问题的任何回答都是失职的。考虑下面的情况,从功能语言没有被教导的事实,几乎是在面向对象或命令语言在中学,大学或研究生水平的频率。正如用户提到的,作为一名程序员,在语言选择方面有着巨大的动力。例如,在一所四年制大学攻读典型的计算机科学学位的过程中,一个人可能会学习一些语言,而且很可能没有一种语言是函数式语言。这个典型的毕业生随后将进入工业领域工作,在每周为工作编程40多个小时后,很难花时间学习一门全新的语言,也很难学习一门与自己已经掌握的语言完全不同的语言。除此之外,还有一个缺点,即函数式语言在工业中不如面向对象或命令式语言有用。可以看出,鉴于目前的状态,可以理解Python和Haskell之间的互操作性并不是某些程序员所希望的

    如果要使用Haskell到Python的绑定,您会在每种语言中做什么

    如果考虑绑定C和Python,例如,在需要加速时使用C,或者当需要推位时,使用Python来表达和简洁。通常,您有两种语言,一种用于大多数逻辑,另一种用于速度,但以清晰度为代价。语言之间的差距越大,你就越能从转换中获益

    如果我们绑定Haskell和Python,您将从中得到什么就不太清楚了。我不会仅仅为了速度而从Python跳转到Haskell,因为Haskell虽然快,但不如C快。但是如果我使用Haskell,我什么时候会使用Python呢?Python并不比Haskell更具表现力,不像比较C和Python

    我认为在大多数情况下,只需导入,并用Python进行功能性编程,而不必将对象转换为某种Haskell表示,做一些工作,然后再将其转换回来,就更容易了


    不过,如果您真的需要,Cython会使编写Haskell的FFI可以使用的函数变得容易

    另一种方法是使用unix管道,只需编写一个Haskell程序,还可以编写一个Python程序,并让它们通过文本进行通信。Haskell和Python甚至对列表使用相同的语法,因此很容易将数据从一个列表传输到另一个列表。

    您可以在Cythons和Haskell的C语言之间进行互操作。Haskell具有与C的互操作性,python具有与C的互操作性。因此,从理论上讲,应该可以将我的python列表自动转换为Haskell列表,反之亦然。但是,在我看来,没有工具可以将这些样板文件整齐地抽象出来,其优点很快就被掩盖了。我认为这是一个文化问题。这就像。。。通过Java脚本服务从Scala使用AWK脚本?这并不是对所提出问题的回答,但您看到连字符了吗?(见附件)。看起来有点夸张