1

でConstantArrayMaxima似た関数を作成したいと考えています。そのため、ラッパーを配置しようとしましたが、最後の引数をリストではなくパラメーターのシーケンスとして受け取りますが、可変数の引数で呼び出した場合、すべてをリストとして配置せずに make-array に渡すことはできません。Mathematicamake-arraymake_array(fixnum,2,3,4)ConstantArray(a,b,c,d..)

パラメーターとして渡されたリストから要素を抽出し、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 に答える