1
Common Lisp에서 tail call recursive factorial을 구현하려고 시도 중입니다. Common Lisp에서 키워드 매개 변수가 왜 필요합니까?
나는 몇 가지 코드를 복사과 같이 커먼 리스프에서 재 작성 : 그러나(defun tailrecsum (x &key (running-total 0 running-total-p))
(if (= x 0)
(if running-total-p running-total 0)
(tailrecsum (- x 1) (+ running-total x))))
, 내가 먼저 경고를 얻을 :
SIMPLE-WARNING:
The function has an odd number of arguments in the keyword portion.
를 그리고 그것을 실행하려고 할 때, 나는 오류가 발생 :
SIMPLE-PROGRAM-ERROR:
odd number of &KEY arguments
키워드 인수가 홀수 일 수없는 이유는 무엇입니까? 그 문제는 무엇이며 어떻게해야합니까?
파이썬에서 예를 들어 내가 쓸 수 :def func(a, b=10):
print([a, b])
그래서 나는 키워드 인자의 홀수, 하나를 가질 것이다. 거기에는 문제가 없습니다.
해야
에서 당신이 키워드를 놓치고있어이 경우
:'(tailrecsum을 (- X 1) (+ 총계 (+ 누계 x))' – jkiiski
@jkiiski 당신은 그 대답을 할 수 있습니까? 그럼 나는 그것을 받아 들일 수있다. 어떻게 든 그것은 여전히 '제어 스택 가드 페이지가 일시적으로 무력화되어있다 : 조심스럽게 진행한다. CONTROL-STACK-EXHAUSTED : # Out [46] (print (tailrecsum 19469))'= ( –
Zelphir
어떤 구현을 사용하고 있습니까? 최적화 특성이 설정되어 있습니까? 꼬리 재귀가 최적화되지 않은 것 같습니다. SBCL에서이 문제가 없습니다. – jkiiski