2016-12-26 3 views
-1

Я написал эту функцию, но мне сказали, что я не могу использовать ее внутри, я не знаю, как ее изменить, чтобы удалить цикл. любое предложение?LISP как написать эту функцию без использования LOOP

(defun function (P VariableValues) 
(let* ((M (mono P)) 
     (VariableNames (variables P)) 
     (VariableDict (loop for x in VariableNames for y in VariableValues collect (cons x y))) 
     (Valorizzati (mapcar (lambda (x) (applica-valori VariableDict x)) M)) 
    ) 
    (if Valorizzati 
     (+ (car Valorizzati) (recursive-sum (cdr Valorizzati))) 
    0))) 

ответ

3

Вы можете использовать mapcar для этого:

(mapcar #'cons '(a b c) '(1 2 3)) 
;; ==> ((a . 1) (b . 2) (c . 3)) 
+0

спасибо за ответ, но я не могу заставить его работать ... какие-либо идеи? – user7337963

+0

@ user7337963 Мой код работал, когда я написал ответ. Он должен работать во всех общих реализациях lisp. Разве это не работает для вас? – Sylwester

+0

, если я просто проверю код, который вы ему предоставили, он отлично работает, когда я реализую его в своей функции, он компилируется без ошибок, но он дает мне ошибку при тестировании функции – user7337963

Смежные вопросы