Complex/imaginary elisp 中的数字?

Complex/imaginary numbers in elisp?

elisp支持虚数吗?我正在尝试使用 lisp 交互模式缓冲区 运行 学习在线数学课程。 Emacs elisp 有 "higher math" modules/libraries 吗?

Emacs 包含 calc,一个支持复数的综合计算器。

手册在这里: C-hig (calc) RET

其他需要特别注意的节点是:

  • (calc) Complex Numbers
  • (calc) Complex Number Functions
  • (calc) Calling Calc from Your Programs

我刚找到一个调用 Calc 的好例子:Mastering Emacs; Fun with Emacs Calc 它讨论了如何使用 calc-eval 函数将 Calc 嵌入到 elisp 代码中:

ELISP> (calc-eval "1+2")
"3"

它给出了在 elisp 代码中使用 calc-eval 调用 Calc 的示例。

不幸的是,emacs lisp 没有原生的复数。它只有手册中描述的enter link description here:

Integer Basics: Representation and range of integers.
Float Basics: Representation and range of floating point. 

此外,您不能重叠基本数学函数以使用其他类型的数字,请参阅 this discussion

Unfortunately you can't practically advise functions that have been assigned bytecode opcodes. This includes * and most of the other math operators. Your advise won't fire for any functions that have been byte-compiled. This caught me by surprise a few years back: The Limits of Emacs

所以添加这个功能并不容易,幸运的是emacs lisp是lisp的后代,所以你可以有其他很多解决方案。

有一个package可以使用复数:

The "cplx" package represents complex numbers as a pair of floats in a cons cell.

并且还添加了数字与 emacs lisp 数字交互的基本操作。

另外@phils answer 指出,emacs 内部存在 calc,被描述为高级桌面计算器,基于 HP-S28,它也是一个用 Elisp 编写的代数系统,您可以轻松扩展,并且支持所有类型的数字,你可以使用 calc 或在 emacs lisp 程序中使用它

表达式为字符串:

ELISP> (calc-eval "1 + 2i + 3")
"2 i + 4"

ELISP> (calc-eval "1 + 2i * 3")
"6 i + 1" 

或者直接使用数据类型

ELISP> (calcFunc-add 3 '(float 5 0) '(cplx 4 5))
(cplx
 (float 12 0)
 5)

请仔细阅读emacs lisp calc manual and take a look at some blogs talking of this topic like this one

回复晚了,但是,除了 calc 之外,还提供面向数学的支持: