1

Maxima我想在. _ Mathematica因此,我尝试放置一个包装器,make-arraymake_array(fixnum,2,3,4)将最后一个参数作为参数序列而不是列表,而如果ConstantArray(a,b,c,d..)使用可变数量的参数进行调用,则我无法将其传递给 make-array 而不将其全部作为列表。

为了解决从作为参数传递的列表中提取元素并放入 make-array 函数的问题,我尝试了,

    constantarray((l)):=block([eq:'make_array(fixnum)],
                        map(lambda([x],eq:endcons(x,eq)),l),eq);

哪个在调用

constantarray([1,2,3,5,3]); 

返回

make_array(fixnum,1,2,3,5,3)

如果我复制此输出,将其粘贴到控制台并在返回给我的Lisp array [1,2,3,5,3].

我曾尝试使用''%&ev(constantarray(1,2,3,5,3),nouns)等对其进行评估,但它只是不起作用。我想知道是否有人知道如何强制进行此评估,或者我正在做一些不可能的事情。

4

1 回答 1

2

尝试这个。

constant_array ([L]) := block ([x : first (L), d : rest (L)],
    apply (make_array, cons ('any, d)),
    fillarray (%%, [x]));

函数定义foo([L]) := ...意味着函数接受可变数量的参数,并且L是实际提供的参数列表。apply (make_array, cons ('any, d))就像打电话一样make_array('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)))}
于 2014-03-05T18:54:24.210 回答