0
저는 Clojure 초보자이며 오류의 의미를 디코딩 할 수 없으며 시퀀스에서 가장 작은 숫자를 찾기 위해 왜 내 작은 프로그램에서 발생하는지 이해할 수 없습니다.시퀀스에서 가장 작은 수를 찾으려면 루프를 사용하여 실패합니다.
(defn find-min
[nums]
(loop [smallest 1000000 i 0]
(if (= (count nums) i)
smallest)
(if (< (nums i) smallest)
(recur (nums i) (inc i))
(recur smallest (inc i)))))
(find-min [3 4 0 2])
IndexOutOfBoundsException가 clojure.lang.PersistentVector.arrayFor (PersistentVector.java:158는)
이제내가 바인딩 오류 중 인덱스하지만 첫 번째 경우 기능이 있음을 이해한다는 것을 걱정 걸리는 함수가 돌아 오면 왜 그렇게됩니까?
에 중첩 된 두 번째
if
을 넣어 할 수 있습니다. '돌아 오는 것 '같은 것이 없습니다. – ymonad@ymonad가 말한 것을 명확히하기 위해'return '과 같은 것이 있지만 암묵적이며 통일 된 규칙 집합을 따릅니다. 리스프를 너무 강력하게 만들지 만 초보자에게 혼란스럽게 만듭니다. 기능적 사고로의 가장 쉬운 전환은 파이프 라인의 관점에서 생각하는 것입니다. 목록에서 가장 작은 숫자를 원합니다. 그래서 우선 목록을 정렬하는 것이 중요합니다. 이제 목록의 첫 번째 요소가 가장 작아서 첫 번째 요소를 가져옵니다. '(first (sort nums))'Clojure는 내부를 평가하여 정렬의 리턴이 처음으로 전달된다. – Gary