2014-11-29 5 views
-1

Я пытаюсь создать лямбда-функции, которые используют один и тот же код, но имеют разные Внутренние параметры. Чтобы уточнить, я помещаю здесь код:Функциональность лямбда отличные параметры

(defun testes() 
(setf lol '()) 
(loop for i in (list 1 2 3 4 5) 
     do (loop for j in (list 1 2 3 4 5) 
     do (setf lol (append lol (list (cons i j)))))) 


lol 

) 

(defun mainff() 
(setf lol (testes)) 
(setf res()) 
(print lol) 
(loop for i in lol 
    do (setf res (append res (list #'(lambda() 
         (print i) 
         )))) 
) 
res 
) 

(defun fun() 
(setf res (mainff)) 

(loop for i in res 
    do (funcall i) 
) 
) 

Возвращаясь к Inicial вопрос, я в Append УЭ должен быть уникальным для каждого лямбда, который создается. Однако он сохраняет только последнее значение, которое он принимает (5 5). Любой способ решить это?

+0

Где указаны ваши переменные? 'res' и' lol' не объявляются. Это ошибка. Вы также хотите правильно форматировать и отступать свой код. Добавление к концу списка плохо. Сокращенный из-за отсутствия усилий для написания хорошего кода. –

+0

это просто тесты без моего фактического кода. Просто упрощенный пример сложного кода. И об отступлении, это было, когда я опубликовал здесь. – Massive

+0

Извините, но для написания небрежного кода. Редакторы делают отступ, правильный код более читабельен. В основном ваш путь значительно затрудняет запись правильного кода. –

ответ

1

Используйте LET, чтобы создать другую привязку для каждого i.

(loop for element in list 
     ... 

     (let ((i element)) 
      (lambda() 
      (print i))) 

     ... 

    ) 
+0

благодарим вас за предложение! это сработало – Massive

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