(Clojure에 여기에) 내가 svd
길이 세의 목록을 반환왜 def 형식으로 파괴되지 않습니까? <code>let</code> 형태에서
(let [[u s v] (svd A)]
(do-something-with u v))
같은 일을 할 수 있습니다. 이 할 수있는 일이 매우 자연 일종이다, 왜 우리는 우리가
(def [u s v] (svd A))
과 def
양식의 기본 동작과 같은 다양한 일반화를하지 않는 것이 아닌가요? 나는 이것이 def
이 벌써하는 일을 어떻게 방해 할 수 있는지 보지 못한다. Lisp 또는 Clojure의 Zen을 이해하는 사람이 def
이 (왜곡이있는) 바인딩을 let
처럼 강력하게 지원하지 않는 이유를 설명 할 수 있습니까?
나는 이것이 내가 관심을 갖고 있었던 일종의 대답이라고 생각한다. 내 편에 과도한 편집의 위험이 있음을 나는 Clojure에서하지 않는 이유가 부분적으로 기술적 인 것이라고 말하고 있다고 생각한다. 컴파일러 프리미티브), 부분적으로는 (Rich Hickey와 같은) 원시적 인'def' *로 시작할 수 있었고 나중에 코어의 어느 시점에서'def'를 선언 할 수있었습니다. –
@ GabrielMitchell 예, 가능했을 것입니다. 그러나'def'는'let'보다 유용하지 않으며 대칭성이 부족합니다. 'let' ** 항상 ** 벡터 내부를 파기하고 파괴합니다. 'def'를 그렇게 만들면 훨씬 편리하지 않게되고, def가 심볼이나 파괴적인 형태를 받아들이도록 만드는 것은 꽤 끔찍합니다. – amalloy
그런 매크로가 총체가되는 이유에 대해 좀 더 자세히 말씀해 주시겠습니까? 지금 당장은 좋은 생각이라고 생각합니다. 그러나 귀하의 의견을 토대로 Clojure의 곡식에 대해 어떻게 든 실행되는지 궁금합니다. 일반적으로 언어를 사용하는 것보다는 언어를 사용하는 것이 더 좋지만 언어에 익숙하지 않은 사람에게는 호소력이있는 것 같습니다. 10 년 후에 그런 매크로를 사용하는 것이 평범하지 않다는 사실은 내가 다른 방법으로 가장 잘 해결 된 문제에 대한 서투른 해결책인지 궁금하게 만든다. –