タグ

ブックマーク / basking-cat.blogspot.com (5)

  • Destructuringを使おう

    Clojureで積極的にDestructuringを使っていこうという話です。 ListやVectorに対する再帰 例: index-of Destructuringを使うとこんな感じで書ける。 firstとrestがなくなりました。 例: end Destructuringは関数の引数部に直接書ける。 リスト全体を束縛する変数を省略出来ました。 MapやRecordに対するDestructuring レコードに対する操作 例: abs Destructuringを使うとこんな感じ。 {:keys [foo bar ...]}はフィールドを列挙することでその値を束縛します。 例: add フィールドと違った名前の変数名を付ける場合は{foo' :foo bar' :bar ...}という記法が使えます。 Destructuringを使うことで要素の取得、束縛を簡素にしませんか?

    pochi-mk
    pochi-mk 2013/02/07
    いつみてもかっこいいなぁ。アイコンもかわいいし。
  • ClojureのKeywordはLensなのですy

    春休みヤッター! ブログの更新頻度も上げていくつもりです。 Lens Lensはあるフィールドに対するgetterとsetterを持つ。 コードにするとこんな感じ。 見てわかるとおり、lgetはgetで、lsetはassocで十分なのだ。 Lensの特徴 getとsetがあればmodifyが定義できる。 Clojureにはupdate-inがある。 Lensは合成が可能だ。 Clojureの{get, assoc, update}-in関数は複数のKeywordをとることで、ネストしたレコードに対しても有効です。 LensはStateモナドと組み合わせると素敵です。 更新途中の状態を取得することは出来ないけれど、Clojureにはアローマクロが存在します。 KeywordがLensだということを意識すれば、Lensの考え方を応用することが出来ますね。

    pochi-mk
    pochi-mk 2013/01/29
    春休みってきつい冗談をwww
  • Clojureで三目並べ

    Lisp Advent Calendar 2012 6日目の記事です。 三目並べ ここでは三目並べソルバについて書きます。 tic tac toe 三目並べ、すなわち◯×ゲームです。 小学生の頃とかやってました。 このゲームは両者が最善を尽せば必ず引分けになるゲームで、その最善手もわかりやすいので他人とやってもだいたいドローになります。 この三目並べで盤面から次の手を返すプログラムを、ClojureとClojureScriptの両方で動くように作成します。 core.logic 今回は論理プログラミングでこのパズルを解きます。 最初にnamespaceですが、ClojureとClojureScriptの両方で動かす為に、多少の黒魔術があります。 ;*CLJSBUILD-REMOVE*;はcljsbuildがビルド時に削除してくれるコメントです。 core.logicがclj版とcljs版で

    pochi-mk
    pochi-mk 2012/12/06
    halcat0x15a さんの3連投。core.logic、clojurescript、JavaFX。かなり先を行っている感ある。すごすぎる...
  • Clojureのエラー処理

    Clojureでエラー値を返すかもしれない関数ってどう書くのだろうとちょっと考えてみる。 Scalaだと例外はあまり使わず、EitherやValidationを使う派。 やはり、コンパイラの恩恵を受けることが出来る書き方が良い。 しかし、Clojureは動的型付けの言語。 コンパイラの恩恵は特にない。 なので、 どのような値が返ると扱いやすいかを考える。 Clojureは基的に nil返す 例外投げる の2通りだと思う。 Clojure標準のライブラリはnilを渡してもそれなりに動作するし、if-let,when-let,fnilなどの関数も用意されている。 しかし、nilだとどのようなエラーだったのか判別がつかない。 このような時に例外を使って、エラーの種類によって投げる例外を変えれば良いのだと思う。 Clojureの例外を投げるような関数は以下のように書ける。 この場合は、Java

    pochi-mk
    pochi-mk 2012/10/27
    はじめ「駄菓子菓子!」の意味がわからなかったwww Clojure で class を定義するのは面倒だけど、Clojure で完結できるよいお作法は無いものか...
  • Clojureへの不満とか

    最近はClojureばかり書いているので、良い所ばかりでなく、気になるところも見えてきました。 なにか意見をもらえるかもしれないので書き並べておきます。 セルフホスティングして欲しい Clojureのソースコードを読むときに、高確率でJavaのコードを読まなければいけないので悲しくなります。 やはり、gen-classとかでは物足りないのかなあ? それとも、セルフホスティングにはあまりヤル気がないのか・・・・ clojure.langのJavaDoc欲しい ソースコード追うのが面倒なので。 Protocolをもっと使って欲しい 自分で新しいデータ型を作った時に、既存の関数を使うためにclojure.langの得体の知れないinterfaceを実装するわけですが、Protocolとして存在すればClojureの中で完結するのでうれしいのだけど、これはデータ型がJavaに依存しすぎてて簡単には

    pochi-mk
    pochi-mk 2012/10/03
    こういう記事を読むとScalaとかHaskellとかも勉強したいなぁ、とか思ってしまうのだが...いろいろと時間がない。
  • 1