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 之外,还提供面向数学的支持:
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 之外,还提供面向数学的支持: