gpt4 book ai didi

lisp - 用 maxima 语言编码 vs lisp

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:43 24 4
gpt4 key购买 nike

我只是想写一些类似于 Mathematicapartition function 的函数在最大值中传递选项,

listpartitionpad(l,n,k,d):= block([temp:[],gap,newl,ntemp:[]],
newl:apply(create_listpad,flatten([n,k,d,l])),
map(lambda([x],if(length(newl)>=x+n-1 and is(unique[x]#[d]))then temp:cons(part(newl,makelist(i,i,x,x+n-1)),temp)
else temp:cons(part(newl,makelist(s,s,x,length(newl))),temp)),makelist(i,i,1,length(newl),k)),
ntemp:sublist(temp,lambda([x],is(length(x)=n))),reverse(ntemp));

Usage:listpartitionpad([a,b,c,d,e,f,g],3,3,x); => [[a,b,c],[d,e,f],[g,x,x]]

现在,正如我所检查的那样,所有列表操作函数都是用 lisp 编码的。

我的问题是,我可以用 maxima 语言而不是 lisp 编写任何此类函数是否很好,否则它会给我一些性能问题或其他我应该知道但我还不知道的问题。我做了一个简单的测试

:lisp(time(loop repeat 1000000))

real time       :      0.850 secs
run-gbc time : 0.540 secs
child run time : 0.000 secs
gbc time : 0.310 secs

如果是另一种基于最大值的方法,

block([],for i:1 thru 1000000 do []);

Evaluation took 5.7700 seconds (5.7700 elapsed)

随着 i 的增长,这种差异呈指数级增长。

这就是所有列表操作都用 lisp 编码的原因吗?

最佳答案

几个不同点。

  • Maxima 主要在 Lisp 中实现,因为 (1) 实现需要访问表达式的内部结构,并且 (2) 通常 Lisp 代码比 Maxima 代码更快。
  • 虽然 Lisp 代码确实通常比 Maxima 代码运行得快得多,但我的建议是使用 Maxima 来实现算法,除非您非常熟悉 Lisp。速度差异可能不会产生太大的实际差异。作为开发者,您花费的时间更为重要。
  • 关于 block([],for i:1 thru 1000000 do []),如果它的运行时间在循环计数中确实是非线性的,那听起来像是一个错误。如果您可以验证这一点,请随时打开有关它的错误报告。 http://sourceforge.net/p/maxima/bugs (您需要创建一个 SF 登录名才能提交错误报告。)

关于lisp - 用 maxima 语言编码 vs lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22349251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com