是否可以将外部函数包装在emacs-lisp中?我有兴趣从GNU科学图书馆做这样的事情:
(let ((A '((0.18 0.60 0.57 0.96)
(0.41 0.24 0.99 0.58)
(0.14 0.30 0.97 0.66)
(0.51 0.13 0.19 0.85)))
(b '(1 2 3 4)))
(gsl-linalg-LU-solve A b))
返回 (-4.05205 -12.6056 1.66091 8.69377(
如果这是不可能的,有没有其他方法可以将数值方法引入 emacs-lisp?
AFAIK,任何不被 emacs 直接支持的二进制库的链接是不可能的。前段时间我在某处读到这是 emacs 的预期行为,以避免意外崩溃。我再也不知道这句话的确切来源了。(他人的帮助是赞赏的。
变量dynamic-library-alist
的帮助建议如下:
动态库列表与实现它们的外部文件。 ... 另请注意,这不是用于访问外部的通用工具 图书馆;只有那些已经被 Emacs 知道的才会被加载。
尽管如此,calc 包提供了数值算法。例如,https://www.gnu.org/software/emacs/manual/html_node/calc/Vector-and-Matrix-Arithmetic.html用于 LU 分解。
一种可能的出路是将call-process
或start-process
与运行矩阵操作的可执行程序一起使用,并通过stdin
和stdout
与这些程序进行通信。