GAP FAQ中对此似乎非常悲观:
8.1: 我可以从其他程序调用GAP函数吗?
简短的回答是否定的。更详细地解释一下,GAP系统的所有代数功能本质上都是使用GAP语言编写的,因此需要GAP解释器才能运行。解释器是用C编写的,但由于某些原因,它不能与同一进程中的其他代码相容,因此没有明智的方法将GAP链接到C、Java或其他程序作为子例程库。
但还有一些希望:
你可以做的是在子进程中运行GAP,并使用管道、伪终端、UNIX FIFO或类似设备进行通信。我们已经在多个项目中成功地实现了这一点,如果您想走这条路,可以联系支持列表以获取更详细的建议。
更新
FAQ现在也说明了:
最近,SAGE的一些开发人员开发出了libGAP,它允许将整个GAP系统嵌入C库。但仍然无法仅嵌入单个函数,而且对libGAP的第一个调用仍然必须调用完整的GAP启动序列。
或者,有多种方法将GAP作为服务器进程运行,并从C或C++程序中调用它。请参见GAP端的SCSCP软件包。有几个C和C++库实现了客户端方面。
请注意,我以前做过几次,效果还不错,但这意味着您无法使用 Mathematica 笔记本界面....
一个真正有用的工具是将 Mathematica 钩接到 expect(或pexpect),以便可以为 Mathematica 编写类似于控制台程序的界面。这基本上就是 Sjoerd 答案中第二个引用建议的内容。