nth-value — n번째 반환 값만 뽑기

nth-value — n번째 반환 값만 뽑기

여러 값을 돌려주는 폼이 있을 때, 정확히 n번째 값 하나만 꺼내 쓰고 싶은 경우가 있어요. nth-value매크로로, 폼을 평가해서 n번째 값만 돌려주되 값이 없으면 nil을 돌려줘요.

출처: NTH-VALUE - Common Lisp HyperSpec

시그니처

nth-value n form => object

본문

인자와 값

  • n — 음이 아닌 정수이고, 평가돼요.
  • form이고, 아래에서 설명하는 대로 평가돼요.
  • object객체예요.

설명

n을 평가한 다음 form을 평가해서, 그 form이 내놓은 값 중 n번째 값 하나만 돌려줘요. nform이 돌려준 의 개수보다 크거나 같으면 nil을 돌려줘요. (첫 번째 반환 값은 0번으로 세요.)

예제

(nth-value 0 (values 'a 'b)) =>  A
(nth-value 1 (values 'a 'b)) =>  B
(nth-value 2 (values 'a 'b)) =>  NIL
(let* ((x 83927472397238947423879243432432432)
       (y 32423489732)
       (a (nth-value 1 (floor x y)))
       (b (mod x y)))
  (values a b (= a b)))
=>  3332987528, 3332987528, true

Notes

연산적으로는 다음 관계가 성립해요. 다만 nth-value 쪽이 일부 구현에서 더 효율적일 수 있는데, 예를 들어 어떤 consing을 피할 수 있기 때문이에요.

(nth-value n form) ==  (nth n (multiple-value-list form))

더 알아보기

  • multiple-value-list — 모든 값을 리스트로 모으기
  • nth — 리스트의 n번째 요소