Lisp Maxima:从函数返回函数并在其后对其求值
我想在Lisp Maxima:从函数返回函数并在其后对其求值,lisp,common-lisp,maxima,computer-algebra-systems,Lisp,Common Lisp,Maxima,Computer Algebra Systems,我想在Maxima中创建一个类似于Mathematica中的函数。因此,我尝试在make array周围放置一个包装器,但是make_array(fixnum,2,3,4)将最后一个参数作为一个参数序列而不是列表,而如果调用ConstantArray(a,b,c,d…)的参数数量可变,则我无法将其传递到make array而不将其全部作为列表 为了解决从作为参数传递的列表中提取元素并放入make数组函数的问题,我尝试 constantarray((l)):=block([eq:'make
Maxima
中创建一个类似于Mathematica
中的函数。因此,我尝试在make array
周围放置一个包装器,但是make_array(fixnum,2,3,4)
将最后一个参数作为一个参数序列而不是列表,而如果调用ConstantArray(a,b,c,d…)
的参数数量可变,则我无法将其传递到make array而不将其全部作为列表
为了解决从作为参数传递的列表中提取元素并放入make数组函数的问题,我尝试
constantarray((l)):=block([eq:'make_array(fixnum)],
map(lambda([x],eq:endcons(x,eq)),l),eq);
哪一个电话
constantarray([1,2,3,5,3]);
返回
生成数组(fixnum,1,2,3,5,3)
如果复制此输出,将其粘贴到控制台上,并在返回Lisp数组[1,2,3,5,3]
时运行,则此函数执行良好
我试着用''%
&ev(君士坦塔瑞(1,2,3,5,3),名词)等来评估它,但它就是不起作用。我想知道是否有人知道如何强制执行此评估,或者我正在做一些不可能的事情。试试这个
constant_array ([L]) := block ([x : first (L), d : rest (L)],
apply (make_array, cons ('any, d)),
fillarray (%%, [x]));
函数定义foo([L]):=…
意味着函数接受数量可变的参数,L
是实际提供的参数列表<代码>应用(make_数组,cons('any,d))
就像调用make_数组('any,d[1],d[2],d[3],…)
。另外,在块中,%%
是上一个表达式的值
例如:
constant_array (1234, 4, 3, 2);
=> {Lisp Array:
#3A(((1234 1234) (1234 1234) (1234 1234))
((1234 1234) (1234 1234) (1234 1234))
((1234 1234) (1234 1234) (1234 1234))
((1234 1234) (1234 1234) (1234 1234)))}
这似乎很好,我也很感谢这个建议。但是我也在想我的方法是否可行。@Rorschach在你得到的结果中,你可以写
ev(%,nomes)
来计算make_array
名词表达式。