答案 0 :(得分:9)
最近在Racket邮件列表中出现了一个类似的问题,有人发布了一个链接到Matthew Flatt suggested starting a subprocess and piping的旧帖子。
看起来朱莉娅没有提供外国接口(例如,打电话 朱莉娅来自C)。所以,我认为你必须单独管理朱莉娅 通过
process
或subprocess
处理并与流程进行通信 通过stdin和stdout。在2014年1月29日星期三16:58:29 -0800(太平洋标准时间),E Comer写道:
Hi Racket开发人员,程序员和用户:
有没有办法从DrRacket调用Julia函数? [我试图整合 Julia的数字运算能力与Plot的漂亮图形 Racket中的模块,用于研究特定动力系统的某些特性]
非常感谢您的支持。
恩里克
例如,编写一个循环的小型Racket程序:从stdin读取,将结果写入stdout。它的读写格式取决于您。它可以读取s表达式(方便在Racket中)并输出一个面向行的结果(在R中可能更方便,我不知道)。
然后让R启动Racket程序作为子进程,并与它的stdin和stdout对话。
作为反向的一个示例(具有到子进程的Racket管道),请参阅this Racket "client"与this Python "server" subprocess对话。我不知道R是否有类似Racket的process
,它会为你提供子进程的stdin和stout。
虽然FFI似乎是"正确"实际上,在高级语言之间编组事物可能具有挑战性。当你有一些特定的互操作时,它通常是矫枉过正的。我的建议是从管道到子流程的方法开始。它通常简单可靠。它可能会变得足够快以满足您的需求。有时甚至更快。[1]
[1]:作为一些传闻,请查看GitHub在Ruby代码中使用Python编写的Pygments的历史。有一次,他们有一些精心设计的方法在Ruby中嵌入Python。为了加快速度,他们转而在子进程和管道中运行Pygments。 (无论如何,这是我对提交历史的理解。)