clojure.core.logicというClojureをProlog化するライブラリがある。 Prologとは、論理型プログラミング言語。 下記のサイトで詳しい説明をしている方がいらっしゃるので、論理型言語についての説明は省略。 http://www.geocities.jp/m_hiroi/prolog/ このPrologのようなことが、論理型言語ではなく関数型言語のClojureで、ライブラリ clojure.core.logic をロードするだけでできてしまう。 https://github.com/clojure/core.logic The Reasoned Schemer という本は、Schemeで論理型プログラミングを実現する内容だが、 clojure.core.logic はこの本の内容をClojureに移植したもの。 The Reasoned Schemer 作者: D
Clojureはバイトコードを作成するために ASM というライブラリ(Javaバイトコード操作用フレームワーク)を 利用しているようです。 (JVMの)Clojureを利用できる環境では(たぶん)ASMが利用できる(clojure.asm)ので、 勉強がてらこのライブラリを利用してHelloWorldプログラムを作成してみます。 (import '[clojure.asm ClassWriter Opcodes]) (def target-name "Hello") (def cw (ClassWriter. ClassWriter/COMPUTE_MAXS)) ;; public class Hello extends java.lang.Object { ... (.visit cw Opcodes/V1_5 ; バージョン Opcodes/ACC_PUBLIC ; アクセス修飾子
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を使うことで要素の取得、束縛を簡素にしませんか?
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.
ClojureでCSVファイルを読み込んでいたら OutOfMemoryError に出会ってしまったので 戒めの意味をこめてメモ。 先頭2行がヘッダで残りの行がデータ、というExcelチックなファイルを読み込んでみます。 まず、読み込む対象となる大きなCVSファイルを作成します。 (require '[clojure.data.csv :as csv]) ;; ファイル名 (def LARGE-CSV-FILE "large-file.csv") ;; ファイル作成 (with-open [w (clojure.java.io/writer LARGE-CSV-FILE)] (.write w "ID1, ID2, ID3, ID4\n") (.write w "a, b, c, d\n") (doseq [x (range 5000000)] (.write w (format "%s
春休みヤッター! ブログの更新頻度も上げていくつもりです。 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の考え方を応用することが出来ますね。
最初の文章のまま載せていますので、コメント欄のshiroさんの添削と合わせてどうぞ: 一概には言えないが、2点だけ。 僕は、SICPはプログラミング言語の本じゃなくて、あれはプログラミングの本なんだと思ってる。本の中でSchemeを使っているのは、アトミックなプログラミング言語だからなんだ。ラムダ計算、末尾再帰、継続を使った抽象制御、抽象構文(マクロ)、可変状態など。軽量で、かつ十分だ。 SICPでは、プログラミングをする上での課題を扱っている。モジュラリティ、抽象、状態、データ構造、並列処理など。generic dispatchやオブジェクト、並列処理、遅延リスト、(可変な)データ構造、「タギング」なんかの、明確な課題設定に対する実装例と解説が書いてある。 Clojureはアトミックなプログラミング言語じゃない。僕はもう、アトミックにプログラミングするのは古くて遅くて飽きた。Clojur
この領域には、androidおよびデスクトップ環境で実行可能なアプリを、clojureで書く為の環境を構築する手順を書く。 山田の環境がベースなので、それに準じた手順となる。 また、ここで扱う要素はどれもこれも進化/変化が非常に早い為、常に最新の状況を確認する必要がある。 要件 開発機は古めのwindowsマシン(しかし開発環境構築手順はwindows以外でも似た手順になる筈、しかもwindowsよりも楽に!)。 手軽にandroidアプリを作成する。 山田はandroidアプリの開発/検証にsony tablet Sを使用する。 しかしjavaコードはなるべく書きたくない。java sucks. 今回はclojureを採用する。lisp just sucks less. また、できれば同じコードでwindowsでも動かしたい。 これを実現する「androidゲーム用フレームワーク」として
Clojure Web Development Made Simple Luminus is a Clojure micro-framework based on a set of lightweight libraries. It aims to provide a robust, scalable, and easy to use platform. With Luminus you can focus on developing your app the way you want without any distractions. Developer Friendly Start hacking immediately with the REPL and embedded development server Simple and easy to learn REPL driven
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く