는 다음과 같은 코드를 생각해연속성이 유용한 이유가없는 이유는 무엇입니까?
(call-with-values
(lambda()
(call/cc (lambda (k)
(k k k))))
(lambda (x y)
(procedure-arity y)))
을 그것은, 반환 값 call/cc
호출의 시점에서 계속이 오른쪽에있는 람다, 그래서 그 인수에 대응 그러나 2를해야한다고 여기 꽤 명백하다 대신 위의 (라켓에서) (arity-at-least 0)
입니다.
실제로 Guile (을 procedure-arity
으로 대체)에서 비슷한 코드를 실행하면이 연속이 꽤 많은 논증을 허용한다는 것을 알 수 있습니다.
그래서, 왜 그런가요? 내가 이해하는 한 (내 이해가 틀렸다면 수정하십시오), 연속성은 매우 간단합니다 : call-with-values
의 컨텍스트를 제외하고는 1입니다.이 경우 오른쪽 람다의 속성이 무엇이든 상관 없습니다. (이 있다면 어떤이, 부여, 복잡 할 수있는 case-lambda
등,하지만 당신이 직접 (procedure-arity (case-lambda ...))
를 호출 할 때보 다 더 복잡합니다.)
IMO, 그것은 인수의 수는 있어야한다. 나는 spec (R5/6)에서'values'의 정의가 이것을 잘 정리했다고 생각합니다. – leppie
나는'values'가 연속체가 임의의 속성을 가지고 있음을 암시하는 방법을 잘 모르겠습니다. 연속성이 지원하는 값과 다른 수의 값을 반환 할 수 없습니다. :-) 따라서'(+ (values 1 2 3) 42)'는 유효하지 않다.이 문맥에서 (R5RS에서 정의 된 'values'로 가정하면) 이렇게 생성 된 연속체는 1, 다른 것은 없다. –
또한'call-with-values'와 함께, * consumer *는 * producer *가 아닌 arity를 결정합니다. – leppie