パーサの勉強のために、前回は infixing library を作りましたが、今回は型システムを作ってみます。 Lisp という言語はコード自体がデータとして扱えるので、このようなシステムを作るにはうってつけです。 型システム入門を読みつつ型システムを Lisp のコードに落とし込んでいきます。 今回作ったものは このコミット にあります。 とはいえなんというか、ブログにできることがそんなに多いわけではなく(実装の詳細を日本語にできない)。 まず、型の制約を表すデータを定義します。 (defrecord Constraint [expected actual]) (defrecord Forall [variables expression]) (defrecord Bound [variable]) (defrecord Pair [first second]) (defrecord
Clojure(クロージャ)は、関数型プログラミングや並行プログラミングといった、強力なプログラミング手法をサポートするプログラミング言語です。進んだパラダイムと実用性との見事なバランス、オープンソースでの公開やJavaとの親和性の高さなどの特徴が挙げられます。 本書は、ユーザにとって必要な知識を十分に解説したClojureの実践的な解説書である“Programming Clojure, 2nd edition”(Pragmatic Bookshelf, 2012)を翻訳したものです。基本部分から応用的なところまでを網羅的に解説しています。
わたし的棚ぼた一万円選書 急に千葉さんに手渡された封筒、開けてみたら1万円札が1枚。何ごとかと思えば、同期の出張を代わったお礼をもらったらしい。 「葵はワンオペで育児してくれたから」と半分わけてくれました。 泡銭の1万円 これはもう、わたし的1万円選書をしろという思し召しなのでは……
@halcat0x15a が書いた Clojure への不満とか というエントリを読みました. この手の不満は単なる愚痴に終わってしまうことが多いのですが, Haskell/Scala プログラマから見た Clojure という明確な視点があるおかげで, 単なる愚痴を越えてプログラミング言語間の比較をするきっかけになっています. 私も読んでいて,Scala のように Clojure を書きたいと考えたら, 同じことを思ってしまうだろうなと.なるほどと膝を打ってしまいました. ところで, 人が抱く不満というのは百人いれば百通り違うわけで, Haskell/Scala プログラマという背景が変われば不満も変わってくるわけです. 「改善された Java」として Clojure を使っている私が読むと, Scala プログラマの不満も別の意味をもってきます. そこで,このエントリでは,@halca
Sustainable Security Requirements with the ASVS Josh Grossman provides a brief overview of what the ASVS is, but takes a closer look at balancing trade-offs and prioritizing different security requirements. Josh shares how to make the process repeatable and how to implement it as part of your own organization's requirements process.
clj.batを準備 @echo off setlocal enabledelayedexpansion set CLOJURE_HOME=d:\usr\clojure set CLOJURE_HOME_VERSION=clojure-1.4.0 set CLASSPATH=%CLASSPATH%;.;.\src;.\classes for %%i in (%CLOJURE_HOME%\%CLOJURE_HOME_VERSION%\*.jar) do set CLASSPATH=!CLASSPATH!;%%i for %%i in (%CLOJURE_HOME%\lib\*.jar) do set CLASSPATH=!CLASSPATH!;%%i REM set CLASSPATH java -client -cp "%CLASSPATH%" clojure.main %* endloc
前回はJavaのライブラリーを呼び出す話だけしかしていなくて、ごめんなさい、これは明らかな片手落ちでした。オブジェクト指向プログラミングの良いところはフレームワークに代表される制御構造の逆転*1で、だから、クラスの継承やインターフェースの実装を使用した、ライブラリーから呼び出される場合についても述べなければ不十分でした。 というわけで、今回は、Javaのクラスの継承やインターフェースの実装に関する話をさせてください。 ライブラリー間の依存にやられました 前回で述べたのWebDAVツールは、最初はJackrabbit WebDAVを使って作り始めました。Jackrabbit WebDAVはとても便利で、たとえば、以下のような短いコードでWebDAVのPROPFINDメソッドを使ってHREFを取得するコードを実装できます。 ;; project.clj (defproject spike-cl
前回は偉そうにDSL(Domain Specific Language)について語ってしまった私ですけど、じゃあお前が作ったDSLを見せてみろと言われたら、とても困っちゃう。 困ってしまう理由は、DSLを作っていないからではありません。「DSLと呼ぶにはあまりにもちょぼくさいと感じられるものしか作っていない」からなんです。 でも、その、私は、「DSLは凄いもの」という考え方の方が間違えているんだと考えています。DSLなんてのはごく当たり前の技術で、だから、ちょぼくさいDSLがあっても当たり前なのだと考えています。 ……ごく当たり前の技術を使って凄いモノを作ることができることを鑑みれば、ちょぼくさいDSL「しか無い」部分については、世間様のDSLに対する理解ではなく、私のスキルの方に問題がある気もしますけど。 言語=文法+語彙 さて、言語というのは、文法と語彙の2つで出来ていると考えます。プ
ClojureでJavascriptが書けるClojureScriptが発表されました。(via Clojure/core — Introducing ClojureScript) と思いかけましたが要はCoffeeScriptと同じアプローチで、 「オブジェクト指向なCoffeeScriptの代わりに関数型言語のClojure(ClojureScript)でJavascript書けるよ」 ということのようです。 とはいえClojureScriptはClojureの完全なJS実装というわけじゃなくて、JVMやJavaコアライブラリに依存してるところも多いので、Pure Clojureなら大体動く予定という感じのようです。 JavascriptとなるとGoogle Closureと名前が紛らわしいわ!という問題は承知してるそうですが、ClojureScript自体がGoogle Closur
この前、Clojureでwebdavからバイナリー・ファイルをダウンロードするツールを作ったんですよ。 私はClojureでファイル入出力をするプログラムを作るのは初めてでしたから、いつものようにCheat Sheetでやり方を調べようとして、で、愕然としました。 「バイナリーのファイル入出力の関数が異常に少ない!*1」 ま、ほら、たぶん、アレですよ。Clojureは表現力が豊かな言語なので、こんな少ない関数でも十分なバイナリー・ファイルの入出力ができる……わけなんかあるかぁ!全部Java任せじゃないかぁ! 裸のClojureでバイナリー・ファイルを読み込んでみる 簡単な仕様で試してみましょう。ファイルを読み込み、他のファイルに書き出すという仕様*2のコードを書いてみます。 といっても、Clojureにはclojure.java.ioパッケージにcopyという関数がすでにありますから、その
…even if there is such a thing. The post is meant as a very narrow response to a point Yegge made recently. I haven’t had time yet to sufficiently think through the premise that there is a single dimension on which developers worldviews can be plotted to usefully explain their opinions. Nor have I yet formed opinions on many of the other points he makes. I won’t make claims about whether software
definline を使って Clojure でも配列を Java のように簡潔に扱えるようにします. 関数のような配列Clojure で配列を操作するコードは たとえば,二次元配列にアクセスする場合,Java なら a[i][j] で済むところが Clojure だと: (aget ^longs (aget ^objects a i) j) となります.Java と比べて長く,さらに読みにくいです. ここで,Clojure のコレクションが関数であることを思い出しましょう. たとえば,ベクタなら: user> (def v [1 2 3 4]) #'user/v user> (v 3) 4 のように,インデックスをキーとして要素にアクセスすることができます. これを配列にも適用して, Java の a[i][j] を (a i j) と書けるようにしましょうというのがこの記事の趣旨です.
初めに Clojure Programming 10章の内容からいくつか抜き出して説明します 今回の発表で使っているLeiningen 2はmasterブランチの最新版です(Leiningen 2.0.0-preview7にはHTTPでnREPLサーバーに接続できないという問題があります) Leiningen https://github.com/technomancy/leiningen REPLとは何か Read Eval Print Loop →Lisp系プログラミング言語で良く利用される対話型のプログラミング環境 ClojureプログラマーとREPL Generally what you do in Clojure is you start up a JVM instance that is running the Clojure runtime and starts a REPL
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く