我有一个小程序在 Org 里面使用 SymPy 代码块化简,出来的结果很怪,想用 Maxima 验算一下,如果正确,就用 Maxima 了。
目前配置了这些东西:
(org-babel-do-load-languages 'org-babel-load-languages '( (maxima .t) ))
(setq org-babel-maxima-command "d:/IDE/maxima5410a/bin/maxima.bat")
(add-to-list 'load-path "d:/IDE/Maxima5410a/share/maxima/5.41.0a_dirty/emacs")
(autoload 'maxima-mode "maxima" "Maxima mode" t)
(autoload 'imaxima "imaxima" "Frontend for maxima with Image support" t)
(autoload 'maxima "maxima" "Maxima interaction" t)
(autoload 'imath-mode "imath" "Imath mode for math formula input" t)
(setq imaxima-use-maxima-mode-flag t)
(add-to-list 'auto-mode-alist '("\\.ma[cx]" . maxima-mode))
但是运行这个例子 http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-maxima.html 报错了:
#+name: test-maxima
#+header: :exports results
#+header: :var x=1.3121254
#+begin_src maxima
programmode: false;
print(12^x);
#+end_src
#+RESULTS: test-maxima
| incorrect | syntax: | / | is | not | a | prefix | operator |
| ^ | | | | | | | |
incorrect syntax: / is not a prefix operator
我的设置不对吗?有坑过的老师帮忙提点一下,搜了一天 WWW,资料好少啊。
截图:
.
检测过临时文件都是正确的。
et2010
3
maxima 是专有软件吗?好像还是数学专业软件?如果是,那 ob-maxima 估计更少人用了。
我都是尽量用开源的代替,能用 python 尽量用 python。
Edit:是自由软件,有机会研究一下
Edit 2:楼主可以在 Linux 下面试一下,也许根本没有问题
也许相比跳船,你把“很怪”的问题解决会更有效益。你用的是 ob-ipython 还是 scimax?
如果是 scimax 的话,那部份结果处理的代码碰巧是我写的,我也许可以帮到你
LdBeth
4
CL 大法好。不過我最近開始试著用 Scheme。
et2010
5
common lisp?不太了解,你对 hy 有何看法?
LdBeth
6
新 Lisp 方言还是缺少积累啊。今儿写了百來行 Scheme,scsh 只是個有少數 shell 扩的 Scheme,就抓住了 unix 编程的精隨,让我感覺到了 Scheme 和 CL 在编程思想上的碰撞,一個只提供最少但是坚如磐石的工具,一個海纳百川。
看了 Hy Git Repo 的代碼,本貭上还是用的 python 的编程思想。
对比一下提供个感覺。
Hy
(defn handle-args-list [self]
(setv protected #{}
argslist `[])
(for [[header section] (-> self (.tail) first lambda-list .items)]
(if header (.append argslist header))
(cond [(in header [None '&rest '&kwargs])
(.update protected (-> section flatten set))
(.extend argslist section)]
[(in header '[&optional &kwonly])
(for [pair section]
(cond [(coll? pair)
(.add protected (first pair))
(.append argslist
`[~(first pair)
~(self.expand-symbols (second pair))])]
[True
(.add protected pair)
(.append argslist pair)]))]
[(= header '&key)
(setv &key-dict '{})
(for [[k v] (-> section first partition)]
(.add protected k)
(.append &key-dict k)
(.append &key-dict (self.expand-symbols v)))
(.append argslist &key-dict)]))
(, protected argslist))
Hy Repo 里摸的。用的还是命令式的 Control Flow。整個 Repo 全是 if cond for。
Scheme
(define (load-modules)
(letrec ((loop (lambda (mod lv)
(if (null? mod)
(if (success lv)
(print 'info "No modules loaded.")
(begin
(print 'info
(format #f
"Total `~A' modules loaded."
lv)))
(load-modules
(cdr mod)
(+ lv
(if
(success
(run* `(modprobe ,(car mod))))
(begin
(print
'info
(format #f
"Module `~A' loaded."
(car mod)))
1)
(begin
(print
'fail
(format #f
"Module `~A' failed to load."
(car mod)))
0)))))))))
(print 'info "Loading modules...")
(loop modules)))
这就是 Scheme 函式+rec 的毒。
看這鬼畜缩进就知是我写的。
1 个赞
1.maxima是数学里面的开源祖宗。
2.关于EMACS我现在自己调教了下,基本PYTHON ,maxima,perl 都能在ORG里面运行,满足要求了,就没有使用SCIMax,但还保留在电脑里,有时候测试用,一般都使用自己的弄的大杂烩。比较轻量一点。然后试用了下spacemacs,被吓回来了。
3.关于我那个代数计算,估计结果是对的。maxima能算,就没有去long sympy了。
、
18,19 ,20一切顺利,应该基本相等才对。现在手工验算了。18=20,19等不等,要化简。有了计算机基本没有心情人肉计算了。特别是现在org嵌入代码顺风顺水。
https://emacs.stackexchange.com/questions/37084/how-to-run-maxima-src-code-in-emacs-org-at-windows
然后这个东西,其实是OB-MAXIMA.EL的问题。@ET2010,你应该能搞的。正好给你一个课题。问题里面其实很清楚了。就是几个字串处理。windows 不认,没有返回MAXIMA的结果。按我的测试结果修改应该就能运行了,小虫。我学了下LISP调试,搞了大半天,又被吓回来了。后来直接在MAXIMA环境里计算的,没有在ORG里面使用计算。
这个不是CLISP,是MAXIMA使用CLISP 返回的。这个的BUG,在OB-MAXIMA.EL第76行。要修改的是。emacs-lisp文件。
et2010
10
像我老板说的话
Sorry,我不用 windows 下的 emacs, 没法帮你测试了
开玩笑的啦。:)不好意思啊。
生命不息,折腾不止。要是那天没有折腾的了,看如何办。
et2010
12
我其实是想问问用 hy 有什么好处的,因为一直对它有点心痒(信仰?)
希望你能给我泼点冷水
et2010
13
没关系,我知道你是开玩笑,不过看出来你应该也是搞学术的
不懂 Maxima,但我试了下你提到的例子,结果正确,也没遇到问题。
一些版本信息:
(shell-command-to-string "maxima --version")
=> "Maxima 5.41.0
"
(org-version nil t)
=> "Org mode version 9.1.3 (release_9.1.3-167-gd788d1 @ /Users/xcy/src/org-mode/lisp/)"
(emacs-version)
=> "GNU Emacs 27.0.50 (build 6, x86_64-apple-darwin17.2.0, NS appkit-1561.10 Version 10.13.1 (Build 17B48))
of 2017-11-17"
et2010
15
emacs 27 ?
我 26 还没用上呢
楼主的问题应该就是 Windows 引起的,我虽然没有测试,但是感觉 linux 下应该也没有问题。
那应该是windows独有的问题了。一会路径斜杠。一会这样那样问题。啥时候天下才能一统啊。我到是宁愿LINUX,但是N多世俗的工具又在WINDOWS 里面。等天下统一吧。
et2010
17
其实你可以像我这样两个都用的,windows 下面开一个 linux 虚拟机就行了,配置好共享文件夹就可以让效率最大化。论坛里不少人都这么用的。
目前真是这样搞的。感觉EMACS在虚拟机里比WINDOWS 还快。两边都装全家桶很烦,看来的试着完全迁移到LINUX了。
LdBeth
19
Hy 吧,其實和 Python 无啥大区別,可以做己会 Lisp 或 Python 中一者時学另一者的过渡。
隨手学了也可以,对你來說学习成本应該不高。
1 个赞