2014-03-05 6 views
1

ConstantArray과 비슷한 Maxima의 함수를 Mathematica에 만들고 싶습니다. 그래서 make-array 주위에 래퍼를 넣으려고했으나, make_array(fixnum,2,3,4)은 마지막 인수를 목록이 아니라 매개 변수 시퀀스로 취합니다. 반면에 하나의 인수가 가변 개수 인 경우 ConstantArray(a,b,c,d..)을 호출하면 모든 것을리스트로 만들지 않고 make-array로 전달할 수 없습니다. Maxima : 함수에서 함수 반환 및 후미 계산

목록 매개 변수로 전달의 요소를 추출 메이크업 배열 함수에서 퍼팅의 문제를 해결하기 위해, 나는

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) 등을 사용하여 평가 해 보았지만 제대로 작동하지 않았습니다. 나는 누군가가이 평가를 강요하는 방법을 알고 있는지, 아니면 불가능한 일을하고 있는지 알고 싶다.

답변

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)))} 
+0

이 잘 작동하는 것 같다 나는뿐만 아니라이 제안에 대해 감사한다. 그러나 내가하고있는 방식이 실현 가능한지 궁금했다. – Rorschach

+1

@Rorschach 결과에서'ev (%, nouns)'를 써서'make_array' 명사 표현식을 평가할 수 있습니다. –