Clojure¶
インストール¶
Windows¶
このページ参照
Linux¶
このページ参照.
1 2 |
|
インストールスクリプトは公式にアクセスして確認した上で最新バージョンを使おう.
cider¶
- JDK15ではエラーになる模様.
- 実際 OpenJDK 11 をインストールしたら動くようになった.
ツール類¶
公式ページを参考に~/bin
にlein
またはlein.bat
を置く.
ガイド: 参考リンク集¶
- Clojure公式
- Docs for Functional Tools
- こちらの方が見やすいらしい: ClojureDocs quick reference
- Official docs
- Official docs: core api
- 日本語版
- Clojure By Example
- ClojureDocs Quick Reference
- Clojure高速化テクニック
- Premature optimization is the root of all evil. -- Donald Knuth
- Clojure/ClojureScript関連リンク集
- BRAVE CLOJURE BECOME A BETTER PROGRAMMER
- Very good: Clojure design patterns
- pgarland / algorithms-clojure
- okasaki-clojure
- https://ayato-p.github.io/clojure-beginner/getting_started/intellij_with_cursive.html
- Reagent
ガイド: 関数プログラミングの学習のために¶
Edabit has lots and lots of coding exercises. They're small. They're clearly explained. They are graded Very Easy to Expert. Use these challenges as a way to practice your functional programming skills. See if you can solve the same problem in different ways by applying different skills.
Project Euler has amassed many programming challenges. They are often very mathematical, but everything is clearly explained. The great thing about these challenges is that they will force you to face real limits. For instance, figuring out the first 10 prime num-bers is easy. Figuring out the 1,000,000th prime number before the sun dies out is a real challenge! You'll face memory limitations, performance limitations, stack size limitations, and more. All of these limits will force you to make your skills practical and not just theoretical.
CodeWars has a large collection of exercises that are challenging enough to test your skills but small enough to solve in a few minutes. These are great for practicing different skills on the same problem.
Code Katas are a kind of practice where you solve the same problem multiple times. We perform a kata more for practicing the process of programming than for solving some challenge. These are also good because they let you integrate your new functional program-ming skills with your other development skills, such as testing.
2022-05時点でのWeb開発¶
Pedestal + Duct構成ならこんな感じかな(PedestalとDuctで主要機能をまかなえる)。
- HTTP抽象: Pedestal
- ルーティング: Pedestal
- 入力バリデーション: malli
- RDBアクセス: next.jdbc + Honey SQL
- ライフサイクル管理: Duct (Integrant)
- 設定: Duct
- clojure.spec強化: Orchestra, Expound
Leiningen: GitHubのレポジトリを指定する¶
- Clojure CLI (deps.edn) でも対応できるらしい.
- 参考
profiles.clj
に次のように追記{:user {:plugins [[lein-git-deps "0.0.2-SNAPSHOT"]]}}
project.clj
に次のように追記(:dependencies
と同じインデントになるように):git-dependencies [["https://github.com/tobyhede/monger.git"]]
MySQL接続¶
- cf.
- clojure-doc.org
- clojure.github.io
- ~/junk/clojure/todo-clj
- MySQLで
todo_clj_dev
を作っておくこと:CREATE DATABASE todo_clj_dev
- 仮定: dbuser=root, dbpass=""
- あとでの設定で効いてくる: 必要に応じて書き換える
project.clj¶
1 2 3 4 5 6 7 8 9 |
|
sample.clj¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
REPLで役立つ関数¶
- 参考
doc
,find-doc
,apropos
,dir
,source
,pst
REPLを再起動せずにリフレッシュする¶
- 参考
projece.clj
で:dependencies [[org.clojure/tools.namespace "1.1.0"] ]
を指定する.lein deps
を実行してインストールする.- REPL内で次のコマンドを実行する.
1 |
|
印字・print¶
四種類ある.
人間が読む | 機械が読む | |
---|---|---|
改行あり | println | prn |
改行なし | pr |
関数に引数をリストで渡す: Schemeとの比較¶
Schemeの場合.
1 2 3 4 5 6 |
|
Clojureで括弧なしでリストで渡す方法.
1 |
|
関数・マクロのリファレンス¶
#?@$
¶
- 参考
- 条件つきスプライシングリーダーマクロ.
1 2 3 |
|
defmulti¶
- doc
(defmulti name docstring? attr-map? dispatch-fn & options)
defmethod¶
- doc
(defmethod multifn dispatch-val & fn-tail)
1 |
|
juxt¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
sort-by¶
1 2 3 4 5 6 7 8 |
|
簡単コメント¶
- セミコロンによるコメントアウト以外のコメントアウト法がある.
#_
をフォームまたはシンボルの前につけると, そのフォームまたはシンボルがコメントアウトされる.
記号へのリファレンス¶
- [参考ページ(https://japan-clojurians.github.io/clojure-site-ja/guides/weird_characters){target=_blank}
作ったファイルを別のファイルにインポートする¶
下のように(ns)
に(:gen-class)
を書いておく.
1 2 3 |
|
この状態でこのフォームを評価して, インポートしたいファイルでrequire
なり何なりすればよい.
リストの処理: doseq
, for
¶
- 参考
doseq
はnil
を返す:prn
など副作用発生が前提for
は値を返してくれる.
1 2 3 4 5 6 7 |
|