📝Clojure Syntax

📝Clojure Syntax

Clojure言語におけるシンタックスを扱う.

フォームは 📝Clojure フォーム を参照.

Clojure: リーダマクロ | Reader Macros #

cf. 📝Clojure Macros

Clojure: Threading Macros #

  • スレッディングマクロ.
  • 基本的には -> と をつかう.
  • 入れ子構造の関数呼び出しを逐次処理な呼び出しに変える.

refs:

thread-first (->) と thread-last (-») #

-> も -»ã‚‚1つ目のフォームを初期値にして2つ目のフォームから逐次適用していく.

->はフォームの第一引数に引数が入る. 一方, -»ã¯æœ€çµ‚引数に引数が入る.

-» 利用するケースは第一引数に高階関数を受取り末尾にリストを受け取るような関数である.(map, filter, reduce…)

see also: 💡Clojureデータ構造の操作関数の分類

as-> clojure thread-firstとthead-lastを混在させる #

thread-as or as->をつかうことで, 混在させられる.

(-> [10 11]
    (conj 12)
    (as-> xs (map - xs [3 2 1]))
    (reverse))
; (11 9 7)

cond-> 条件つきスレッドマクロ #

cond->は初期値と(条件, 処理)のリストを受ける. 条件が真のときのみ処理はされる.

(cond-> (初期値)
  (条件) (処理)
  (条件) (処理)
  (条件) (処理))

もし存在すれば(if-exists)そのデータを初期値に加えるようなときにつかう. 初期値がcollectionで, もしparamが存在すればそれをcollectionにaddやassocやconjみたいなケースでよく見かける.

Emacs clojure-mode: M-x clojure-thread #

Emacs clojure-modeの threadingリファクタリングサポート.

ref: https://github.com/clojure-emacs/clojure-mode/#refactoring-support

  • clojure-unwind/clojure-unwind-all:
    • threading expressionを解く.
  • clojure-thread-first-all: -> へ変換.
  • clojure-thread-last-all: -» へ変換.

threading macrosを理解するには, -» の内側で M-x clojure-unwind-allを叩くとスレッディングマクロを使わない場合に変換される. もとに戻すには, M-x clojure-thread-last-all.

💡memo: Clojure Threading MacrosはR-langのdplyrのpipe記法に似ている #

これは 羽鳥教のdplyrに似てないか?

ref:

そしてこの記法の強力な魅力がデータ分析においてR言語をPythonよりも好む人がいるように, Clojureにおいても大変魅力的に違いない.

💡memo: threadingとはわたしである #

theading = 糸, 筋道. これはつまり, わたしではないか?

ref: 🎓経道とはThreadである

Clojure: MetaData #

ClojureのSymbolやCollectionには, MetaDataと呼ばれるデータをmapとして付与して参照することができる.

MetaDataの リーダマクロは ^ みたいなhat表記.

setterとしては, (def ^{:hoge 1} x) のように, defを利用する.

さらに, (def ^:huga y) のように書かれることも多いが, これは (def ^{:huga true} y)と同じ意味. mapの表記が省略されて keywordのみが現れている.

MetaDataの一覧を表示するときは, meta マクロを利用する.

user> (meta #'x)
;; =>
{:line 12,
 :column 7,
 :file "*cider-repl repo/kotori-clj:localhost:38291(clj)*",
 :name x,
 :ns #namespace[user]}

refs:

Active Recalls #

Clojure Threading Macrosにおいて ->と-»ã®é•ã„はなんですか? #

->は第一引数に引数が入る,-»ã¯æœ€çµ‚位置似引数がはいる.

ClojureのMetaDataのリーダマクロはなんですか? #

^