| |
language:clojure [2018/03/27 03:45] – [Stack] ledyx | language:clojure [2021/02/07 03:15] (current) – external edit 127.0.0.1 |
---|
https://clojure.org/guides/learn/syntax | https://clojure.org/guides/learn/syntax |
| |
{{tag>Language Clojure JVM}} | {{tag> clojure functional_programming jvm language }} |
| |
| |
* Mac : http://www.hildeberto.com/2015/07/installing-leiningen-on-mac-os.html | * Mac : http://www.hildeberto.com/2015/07/installing-leiningen-on-mac-os.html |
* 사전에 [[https://brew.sh/index_ko.html|brew]] 설치 필요 | * 사전에 [[https://brew.sh/index_ko.html|brew]] 설치 필요 |
| * Linux <sxh bash> |
| #java8 |
| sudo add-apt-repository ppa:webupd8team/java |
| sudo apt-get update |
| sudo apt-get install oracle-java8-installer |
| |
| #leiningen |
| wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein |
| chmod a+x lein |
| sudo mv lein /usr/local/bin |
| </sxh> |
| |
| |
</sxh> | </sxh> |
| |
<sxh ; title:나머지 변수 이용. 이해하지 못하는 코드> | <sxh ; title:Collecton의 인자 Binding> |
(def my-vector ["A" "B" "C" "D"]) | (def my-vector ["A" "B" "C" "D"]) |
| |
;단순 재귀 | ;단순 재귀 |
;;StackOverFlow | ;;StackOverFlow |
(defn factorial1 [n result] | (defn factorial1 [n] |
(if (= n 1) | (if (= n 1) |
result | n |
(factorial1 (dec n) (*' result n)))) | (*' n (factorial (dec n))))) |
| |
(factorial1 10000 1) | (factorial1 99999) |
| |
| |
=> 24 | => 24 |
</sxh> | </sxh> |
| |
| |
| ==== 함께 구현되는 Interface ==== |
| |
| 참고로 익명 함수에는 4개의 Java Interface가 Implement 된다. |
| |
| * java.util.concurrent.Callable |
| * java.lang.Runnbale |
| * java.io.Serializable |
| * java.util.Comparator |
| |
| |
| https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/AFunction.java |
| https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java |
| |
| |
| |
==== Returing Functions ==== | ==== Returing Functions ==== |
* Clojures : 함수 범위 안에 속하는 모든 변수에 접근할 수 있는 영역 | * Closures : 함수 범위 안에 속하는 모든 변수에 접근할 수 있는 영역 |
| |
<sxh> | <sxh> |
| |
* <nowiki>(-> x forms)</nowiki> | * <nowiki>(-> x forms)</nowiki> |
* forms에 x를 연쇄적으로 두 번째 아이템으로써 뒤에 삽입. | * forms에 x를 연쇄적으로 맨 처음 아이템으로써 뒤에 삽입. |
* 함수를 여러번 중첩하는 경우 유용. | * 함수를 여러번 중첩하는 경우 유용. |
| |
| |
* <nowiki>(->> x forms)</nowiki> | * <nowiki>(->> x forms)</nowiki> |
* forms에 x를 연쇄적으로 첫 번째 아이템으로써 앞에 삽입. | * forms에 x를 연쇄적으로 맨 마지막 아이템으로써 앞에 삽입. |
* Collections를 마지막 argument로 받는 함수들에 유용 | * Collections를 마지막 argument로 받는 함수들에 유용 |
| |