📝Clojure Logics

📝Clojure Logics

STARTUP: showeverything

Clojureの論理制御のシンタックスまとめ.

Clojure Logic Syntaxまとめ #

とりあえず列挙.

  • true?
  • false?
  • nil?
    • not-nil?はないが, some?でnil判定はできる.
  • not
  • =
  • not=: not equal
  • empty?
  • seq

シーケンスに対する述語 #

第一引数に条件(predicate), 末尾にCollectionを取る.

(xxx pred coll)

これらはfilter関数とあわせて用いられる.

  • every?
  • not-any?
  • not-every?

これはcollのみ ([x])

  • any?

some #

someはシーケンスのいづれかの値が条件を満たすかどうかを判定する.

(some pred coll)

戻り値に注意!

述語がtrueを返したら直ちにその値を返す. 全てがfalseならnilを返す.

副作用に関わるClojureの述語(do) #

いわゆるdoなんちゃら.

  • do
  • doto
  • dorun(cf. doall)

do #

do は複数のフォームを手続き的に評価するときに利用する. いちおうなくてもいいけどClojureは関数型パラダイムなので副作用を伴う一連の手続きはdoを書いたほうが親切.

doto #

doto は 第一引数に対して手続き的な操作を行うときに利用する. 主な利用シーンはDBに対してのコマンド発行.

dorun/doall #

dorun, doall は遅延シーケンスのコンテキストで登場する. どちらも遅延評価されたものを強制的に評価して実行する.

そのさい, dorunは単に評価してその結果を考慮せずにnilを返す, つまり副作用があろうが関係ない. 一方doallは遅延シーケンスを評価した結果をシーケンスにして返す.

cf. Clojure: 遅延評価/遅延シーケンス

Active Recalls #

Clojureのempty?とseqの使い分けは? #

Collectionが空かどうかはempty?でチェックする.

一方,空でないかどうかはseqでチェックする.

Clojureのevery?とnot-any?とsomeの違いはなんですか? #

every?は,全ての値がtrue.

not-any?は,すべてての値がfalse.

someはいづれかの値がtrue.


Tags