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
名词表达式。