@NathanDavis 말했듯이, let
는 중간 값 이름을 지정할 수 있습니다 기능이 동일한 효과를냅니다. 종종 덜 복잡한 것을 작성하고 중요한 세부 사항을 폭로 할 수 있습니다.
코드의 내용은 next-num
의 반복되는 응용 프로그램을 만드는 데 관련이 있습니다. 다행히도이 작업을 수행하는 핵심 기능이 있습니다 : iterate
.
(iterate next-num from)
; => (from, from', from'', ...)
그러나, 우리는이 값의 첫 번째 원하지 않는다 : iterate
사용하여, 우리는 값의 무한 게으른 시퀀스를 생성 할 수 있습니다. 우리는 이러한 n
값을 정렬 할 수 있습니다, 마지막으로
(take n
(rest
(iterate next-num from)))
; => (from', from'', from''')
과 : 우리가 take
와 n
값을 잡을 수 있습니다,이 시점에서
(rest
(iterate next-num from))
; => (from', from'', from''', ...)
: 우리가 잘와 시퀀스의 나머지 rest
를 얻을 수 있습니다 :
(sort
(take n
(rest
(iterate next-num from))))
; => (from'', from', from''')
물론 중첩 기능 호출은 곧 어색해집니다. 스레딩 매크로 ->>
(그 형제 ->
처럼) 우리가 무언가로 조금 더 좋은 우리의 코드를 재 배열 할 수 있습니다 문법 설탕 약간이다 : 그래서
(->>
(iterate next-num from)
rest
(take n)
sort)
는 시퀀스 조작 기능의 강력한 라이브러리가 있습니다 방법, 당신이 볼 수 우리는 저레벨 루핑에서 벗어납니다.
또는 전체 루프를 피하기'(- >> (에서 다음-NUM을 반복) 나머지 (N을) 종류)' – Beyamor
@Beyamor : 귀하의 제안 매력처럼 작동한다. 그러나 나는 이유를 모른다. 좀 더 자세히 설명해 주시겠습니까? 아마 당신의 대답과는 별도로 대답 해주십시오. –
고마워, 네이선. 그건 속임수 야. –