저는 Clojure를 배우고 있으며 가변 개수의 매개 변수 ( 가변 함수) 를 취하고 이를 합산 하는 함수를 정의하려고 합니다 (예, + 프로 시저처럼). 그러나 나는 그러한 기능을 구현하는 방법을 모릅니다.
내가 할 수있는 모든 것은 :
(defn sum [n1, n2] (+ n1 n2))
물론이 함수는 두 개의 매개 변수와 두 개의 매개 변수 만 사용합니다. 정의되지 않은 수의 매개 변수를 받아들이고 처리하는 방법을 알려주세요.
저는 Clojure를 배우고 있으며 가변 개수의 매개 변수 ( 가변 함수) 를 취하고 이를 합산 하는 함수를 정의하려고 합니다 (예, + 프로 시저처럼). 그러나 나는 그러한 기능을 구현하는 방법을 모릅니다.
내가 할 수있는 모든 것은 :
(defn sum [n1, n2] (+ n1 n2))
물론이 함수는 두 개의 매개 변수와 두 개의 매개 변수 만 사용합니다. 정의되지 않은 수의 매개 변수를 받아들이고 처리하는 방법을 알려주세요.
답변:
일반적으로 비 교환 법칙이 성립하는 경우에 당신은 사용할 수 있습니다 적용 :
(defn sum [& args] (apply + args))
더하기는 교환 적이므로 다음과 같이 작동합니다.
(defn sum [& args] (reduce + args))
&
원인 args
(의 왼쪽에 아무것도로,이 경우 전체 목록을 인수 목록의 나머지 부분에 바인딩 할 &
).
분명히 다음과 같이 합계를 정의하는 것은 의미가 없습니다.
(sum a b c d e ...)
다음과 같이 작성할 수 있습니다.
(+ a b c d e ....)
seq
합계 함수에 a 를 전달하는 방법이 있습니까 ? 예 : (sum '(1 2 3)) 그리고 결과는 6?
&
두 버전 모두에서 제거
def fn(*args): pass
)를 취하는 함수가 정의되어 있으면 fn (* list_of_args)와 같은 목록을 제공하여 호출 할 수 있습니다. clojure에서 똑같은 일을 할 수 있습니까?
def fn(*args): pass
은 fn([1,2,3])
아니지만 fn(1,2,3)
(분명히 원하는 작업에 따라 다르지만 여기서 정신을 따르려고합니다)
defn
함수 정의를 좀 더 간단하게 만드는 매크로입니다. Clojure는 단일 함수 객체에서 arity 오버로딩, 자체 참조 및&
(defn sum [& args]
(print "sum of" args ":" (apply + args)))
이것은 임의의 수의 인수를 취하여 더합니다.