2012-01-12 3 views
2

함수 이름을 없애는이 코드가 세그멘테이션 오류를 일으키는 이유를 이해할 수 없습니다. (fdefinition 'realname) - 에러없이 제 기능> 출력Lisp 이상한 세그먼테이션 결함 아마 평가 오류

(eval (setf (fdefinition name) `(lambda (this ,@args) ,@body))) 

하지만 난 (realname의 PARAM)을 할 경우이 오류를 오류 얻을 : 8B238080

에서 분할 위반 (11) [코드 0]

어디서 오류가 있습니까? 감사합니다.

+0

lisp 구현/시스템은 무엇입니까? –

+0

저는 LispWorks를 사용합니다. – marchetto91

답변

0

코드에 오류가있어서 함수 대신 fdefinition으로 목록을 지정하고 있습니다. 나는 이것이 segfault를 일으키고 있지만 당신의 구현에서 버그라고 생각할 것이다. (실제로 표준을 위반한다는 의미의 버그인지는 확실치 않지만, 구현이이 오류 자체를 포착하여보고하는 경우 확실히 좋을 것입니다.)

다음으로 시작하는 목록을 전환하려면 lambda을 함수로 변환하려면이를 계산해야합니다. 반면에 setf 주변의 eval은 전혀 필요하지 않은 것 같습니다.

(eval `(setf (fdefinition ',name) #'(lambda (this ,@args) ,@body))) 

을 시도

(setf (fdefinition name) (eval `(lambda (this ,@args) ,@body))) 
+0

정말 고마워요! 지금은 이해!! 그리고 내 코드가 작동합니다! – marchetto91

+0

당신은 바위 젠체하는 사람! :) – marchetto91

0

또는 더 나은 아직 함수 대신 매크로를 사용하고 EVAL 피 :

(defmacro mymacro (name args &body body) 
    `(setf (fdefinition ',name) #'(lambda (this ,@args) ,@body))) 
을 그래서 가능한 솔루션은 evalsetf의 위치를 ​​전환하는 것입니다
관련 문제