2014-10-29 4 views
0

Я хочу создать массив в функции и передать его в качестве параметра другой функции, которая вызывается из этой функции. Как я могу это сделать? Вот псевдо-код:Как определить функцию LISP, которая принимает массив в качестве аргумента?

define FuncA (Array Q){ 
    <whatever> 
} 

define FuncB (n){ 
    make-array myArray = {0,0,....0}; <initialise an array of n elements with zeroes> 
    FuncA(myArray); <call FuncA from FuncB with myArray as an argument> 
} 
+2

Если бы вы пытались что-то, что предложенный вам нужно было сделать что-то конкретное, чтобы принять массив? –

ответ

9

Common Lisp динамически типизированным, поэтому параметр массива объявляется таким же образом, как и любой другой параметр, без его типа:

(defun funcA (Q) 
    Q) ; just return the parameter 

(defun funcB (n) 
    (let ((arr (make-array n :initial-element 0))) 
    (funcA arr))) 

или, если вы не» т нужно создать привязку, просто

(defun funcB (n) 
    (funcA (make-array n :initial-element 0))) 

Тестирование

? (funcB 10) 
#(0 0 0 0 0 0 0 0 0 0) 

Если вы хотите, чтобы проверить, что параметр ожидаемого типа, вы можете использовать typep, type-of, typecase или check-type, например:

(defun funcA (Q) 
    (check-type Q array) 
    Q) 

затем

? (funcA 10) 
> Error: The value 10 is not of the expected type ARRAY. 
> While executing: FUNCA, in process Listener(4). 
Смежные вопросы