nth-value — n번째 반환 값만 뽑기
nth-value — n번째 반환 값만 뽑기
여러 값을 돌려주는 폼이 있을 때, 정확히 n번째 값 하나만 꺼내 쓰고 싶은 경우가 있어요. nth-value는 매크로로, 폼을 평가해서 n번째 값만 돌려주되 값이 없으면 nil을 돌려줘요.
시그니처
nth-value n form => object
본문
인자와 값
n— 음이 아닌 정수이고, 평가돼요.form— 폼이고, 아래에서 설명하는 대로 평가돼요.object— 객체예요.
설명
n을 평가한 다음 form을 평가해서, 그 form이 내놓은 값 중 n번째 값 하나만 돌려줘요. n이 form이 돌려준 값의 개수보다 크거나 같으면 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번째 요소