動機 Lispといえばマクロというくらい、Lispとマクロは関連が深いです。 なのですが、自分は簡単なマクロなら自分で書けるものの、長いマクロや複雑なマクロをあまり書いたことがありません。 そろそろ次の1歩に進んでもいい頃合いかなと思うのですが、じゃぁどうするというところが思いつきません。 それなら公式の長めのマクロを読むことで色んなヒントを得ればいいじゃない、ということで読もうと思いました。 言語はClojureで、読むマクロはclojure.coreから長いものを適当に選ぶことにします。 長いマクロベスト4 case defmulti fn doseq(for) 定量的に図ったわけではないですが、ほぼ間違いないと思います。おそらく、Clojureに触ったことがある人であれば、大体わかるのではないでしょうか。 コードリーディング ソースコードはGit Hubより引用します。変更される可能
LWJGL と OpenCV を Clojure で書いていく 動機 Lisp っぽいSyntaxで OpenGL とか使ってノベルゲームエンジンを作ってみたい JVM 言語で書けば、どこでも動くんじゃないかな? ゆくゆくは OpenCV + OpenAL も使って動画ファイルを再生したい JavaFX...知らない子ですねぇ 出来たこと (OpenCV を Clojure で使うことが出来た)<= まだクロスプラットホームに対応させられていない・・・ LWJGL を、 Java のチュートリアルを変換することで使うことが出来た レポジトリはこちらです 実装方法 注意:ここの実装方法は、OpenCV の項をクリアした上でなければ動きません・ Project.clj ここが一番重要な部分だと思います。僕ではうまく実装することが出来なかったので、[こちら] を参考にさせていただきました。 (お
動機 先日、Clojureの長めのマクロを読むという記事を書いたのですが、自分でもびっくりするほど展開時のコードとコンパイル時のコードを区別できていませんでした。 次は何をしようかなーと考えてはいたものの、さすがにもう少しマクロについて理解せずに先に進むわけにもいかないので再度勉強し直すことにしました。 自分が理解していないのはマクロの中でもクォートだと思ったので、今回はクォートに絞って理解を勧めます。 何番煎じかわかりませんが、自分なりの表現でまとめてみます。 '(クォート)の特性 基本的にクォートされた値は評価されません。例を見たほうが早いでしょうか。 '(シングルクォーテーション)はquoteと同じ意味で、実行時に展開されるリーダマクロと呼ばれるものです。 ※追記 コメントで指摘いただきましたが、リーダマクロが展開されるのは実行時ではなくリード時でした。 ;; 下記は(quote (
前書き 以前に書いた記事の中でforとdoseqがまとめてテストされているということに触れました。 個人的にはそのテストの方法が驚きで、Clojureのテストについての考えは自分になじみのないものでした。 もう少し具体的に表現するのなら、「テストが柔らかい」と感じたのです。「テストライブラリは素材で自由にいじってもいい」といういい方もできるのでしょうか。 その命題が真であるならば、Clojureのテストの方法はきっと驚きに満ちているだろう、というのが今回の記事のモチベーションです。 具体的にはClojureのリポジトリの中から、テストに関するヘルパー関数、マクロを適当に拾い上げて、分類・解説を加えていきます。 clojure.testの主となる関数やマクロについては特に触れません。今回の興味は材料をどう調理するかであって、材料そのものではないからです。 といいながら、材料それ自体と関係ない
Clojurianのlagénorhynque (a.k.a. カマイルカ)です。 先日、Shibuya.lisp lispmeetup #62で「re-frame à la spec」と題してre-frameというClojureScriptフレームワークの概要とclojure.specとの統合方法の一例について発表しました。 本記事では、その発表内容に関連してClojureScriptとre-frameでのSPA開発の流れについてご紹介します。 @ababup1192 さんのElmについての素晴らしい記事 Elm開発における思考フロー からサンプルコードと本文の構成を参考にさせていただきました。 こちらの記事と比較してみると、両言語/アーキテクチャの共通点や差異が見られて面白いかもしれません。 ※ 本記事はClojure/ClojureScript, Reagent, clojure.s
自然言語処理を目的に単語頻度をカウントするときのメモですが、並列処理させる部分だけ変更すれば簡単に他の目的に使えますのでたたき台にできると思います。 まずは使用するライブラリの依存関係をproject.cljに記載します。 (ns word-count (:require [clojure.string :as str] [clojure.java.io :refer [reader]] [clojure.core.async :refer [go-loop]] [clj-time.local :as l])) (defn progress-format [done all interval-done interval-ms unit] (str "["(l/format-local-time (l/local-now) :basic-date-time-no-ms)"] " done "
(defprotocol IPerson (put[self I]) ) (def MPerson{ :put(fn[self I] (println (str I "は「" (:format-output self) "」です。")) ) }) (defrecord Person[name age high format-output]) (extend Person IPerson MPerson) (defrecord Person2[name age high format-output hobby]) (extend Person2 IPerson MPerson) (defn make-Person[name age & {:keys [high] :or {high 162.3}}] (let [format-output (str "名前: " name " 年齢: " a
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く