読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

ClojureでのImmutable Data Structureについてメモ

ClojureのHashMapとVectorのアルゴリズムについて調べていました。 HashMapの方はHAMTというものがベースになっているようです。 HAMTなんとなくわかった、仮想の巨大な配列を作れるから、ハッシュ値にバラつきがあれば終端のテーブルをコピーしてまわる必要…

SchemeでOCaml風if/let

といっても大層な話ではありません。 Early Returnがしたい JavaScript(ES6)書いてる時なんかによく使うのがEarly Returnです。 function foo (bar) { if (barをチェック) { return だめだよ; } let x = baz(bar); if (xをチェック) { return だめだよ; } le…

Clojure(ClojureScript)で副作用を使わず荷物君ゲームを作る

描画のためだけにゲーム全体の状態(への参照)を書き換えて、それ以外では一切参照の書き換えをせずに荷物君ゲームを作りました。 phaendal/nimokkun-cljsgithub.com 元になったゲーム名は商標登録されてるらしいので、「ゲームプログラマになる前に覚えて…

Common LispとClojureでパーサコンビネータを作る

HaskellのParsecがすごいらしい、ということは聞いていたんですが、JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログという記事のおかげでようやく使い方と作り方がわかったので、作っ…

Secretaryで#無しのURLを扱う

Secretaryのサンプルコードこんなカンジになってるんだけど (ns hoge.client (:require [secretary.core :as secretary :refer-macros [defroute]] [goog.events :as events] [goog.history.EventType :as EventType]) (:import goog.History)) (enable-cons…

Omで外から状態を変化させる

問題 以下のようなOmを使ったコードを書くと、Uncaught Error: Assert failed: (transactable? cursor)というエラーが出る (ns hoge.client (:require [om.core :as om :include-macros true])) (def app-state {:log []}) (defn add-message [text] (om/tra…

lein ring serverでauto-refresh?をtrueにしたのに更新されない場合

project.cljでauto-refresh?をtrueにしてるのに、lein ring serverで起動してresource内のindex.htmlを更新しても、更新されなかった。 表示されたindex.htmlの中身を見ると、auto-refresh用のjavascriptが追加されてなかった。調べると、Content-typeが正し…

少しだけClojure 8 / Clojureにシーツ・オブ・サウンドを演奏させる

プログラミングClojure第2版を読みながら続き。 方針 基本的に本の説明をそのままor自分の言葉に直しただけで書き直すようなことはしない サンプルコードが長くて理解しづらい、練習したいなと思うものは細かく試して書いてみる 読んだ時点で書かれてなかっ…

少しだけClojure 7

プログラミングClojure第2版を読みながら続き。 方針 基本的に本の説明をそのままor自分の言葉に直しただけで書き直すようなことはしない サンプルコードが長くて理解しづらい、練習したいなと思うものは細かく試して書いてみる 読んだ時点で書かれてなかっ…

少しだけClojure 6

プログラミングClojure第2版を読みながら続き。 方針 基本的に本の説明をそのままor自分の言葉に直しただけで書き直すようなことはしない サンプルコードが長くて理解しづらい、練習したいなと思うものは細かく試して書いてみる 読んだ時点で書かれてなかっ…

Clojureのlein uberjarでエラーが出た場合

最初からHow toを読んでおけば良かったんだけど、エラーメッセージだけで検索して暫く迷ったので、同じようにエラーメッセージで調べてる人向けにメモしておく Warning: specified :main without including it in :aot. Implicit AOT of :main will be remov…

少しだけClojure 5

プログラミングClojure第2版を読みながら続き。 方針 基本的に本の説明をそのままor自分の言葉に直しただけで書き直すようなことはしない サンプルコードが長くて理解しづらい、練習したいなと思うものは細かく試して書いてみる 読んだ時点で書かれてなかっ…

少しだけClojure 4

プログラミングClojure第2版を読みながら続き。 方針 基本的に本の説明をそのままor自分の言葉に直しただけで書き直すようなことはしない サンプルコードが長くて理解しづらい、練習したいなと思うものは細かく試して書いてみる 読んだ時点で書かれてなかっ…

少しだけClojure 3

プログラミングClojure第2版を読みながら続き。 あっちこっち行ったり来たりしている。 マップのmerge-withの動作 concatの例しか無いけど、2引数関数を取って、先頭のマップから見ていき、同じ値のキーが出てきたときに比較してるのかな? user=> (merge-wi…

少しだけClojure 2

プログラミングClojure第2版を読みながら続き シンボル シンボル・キーワード共に大文字小文字は区別される user=> :hoge :hoge user=> :Hoge :Hoge user=> :HoGe :HoGe user=> 'hoge hoge user=> 'HoGE HoGE マップにキーワードがなかったらnilが返る。値自…

少しだけClojure

目が覚めてしまったのでプログラミングClojure第2版を読みながら少しだけ触ったメモを書いておく。 ソースコードのダウンロード 公式のダウンロードページから落としたものはREADMEとproject.cljが入ってない。(RAKE?ファイルでどうにかするのかな) なのでgi…