2014-11-29 2 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

이 코드는 실제 코드가 아닙니다. 훨씬 복잡한 코드의 단순한 예입니다. 그리고 indents에 관해, 내가 여기 게시했을 때이었다. – Massive

+0

코드 작성에 변명의 여지가 없습니다. 편집자가 들여 쓰기를 수행하면 적절한 코드가 더 읽기 쉽습니다. 근본적으로 당신의 방법은 정확한 코드를 작성하는 것을 훨씬 어렵게 만듭니다. –

답변

1

LET을 사용하여 각 i에 대해 다른 바인딩을 만듭니다.

(loop for element in list 
     ... 

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

     ... 

    ) 
+0

먹어 줘서 고마워! 효과가있다. – Massive