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

「Clojureシンタックスハイライター開発から考えるこれからのLispに必要なもの」を発表しました

7/27に開かれたLisp Meetup #30で「Clojureシンタックスハイライター開発から考えるこれからのLispに必要なもの」というタイトルで話してきました。 Clojureシンタックスハイライター開発から考えるこれからのLispに必要なもの from sohta 内容としては、去…

"Contributing to Clojure"の翻訳記事を公開しました

【翻訳】Clojureにコントリビュートするには - Qiita Contributing to ClojureはClojureにコントリビュートする際に必要な手続きやワークフローについてAlex Millerが説明した記事です。元記事自体は、Clojureの開発に関する広範な情報を提供してくれていて…

ニャンパス株式会社に転職しました

先月で前職を辞め、今週からニャンパスで働き始めたので報告します。 前職 前職では、組込み業界で働いてました。とはいっても、組込みソフトウェアの開発自体には携わってなくて、主に組込みソフトウェア開発のための開発環境の開発をやってました。 詳しく…

tools.analyzerとtools.emitterを組み合わせてキミだけの最強Clojure処理系を作ろう

(このエントリは、Clojure Advent Calendar 2014 21日目、および Clojure Contrib Library Advent Calendar 2013 24日目の記事です。)今回はClojureのcontribライブラリであるtools.analyzerとtools.emitterを使ってカスタマイズしたClojure処理系を作ってみ…

女子力botをもっとイケてるClojureっぽく

(このエントリは、しょぼちむアドベントカレンダー 15日目の記事です) はじめに Clojureアイドルことしょぼちむさんが先日開催されたClojure夜会で、Clojureで書かれた女子力botなるものについて発表していました。Clojure歴3週間とのことでしたが、そうとは…

Clojure夜会でLT発表してきた

もう1週間以上経ってしまったけど、10/10に開かれたClojure夜会に参加してきた。 Clojure 夜会(Evening Party) - Clojure大好き! | Doorkeeper 平日の夜から(しかも東京で)のイベントだったので最初は参加は難しいなぁと思っていたのだけど、休みがギリギリ…

CodeIQ プログラミング言語☆総選挙の問題をClojureで

先月、CodeIQでプログラミング言語総選挙なるものをやってました。CodeIQ プログラミング言語★総選挙|CodeIQ内容はおおむね、各人が好きな言語へ投票して言語ごとの得票数を競うものでした。まず予備選挙をやって、上位の8言語だけが本選挙に勝ち上がれると…

tools.macroを使ってLet Over Lambdaのパンドリックマクロを実装する

(このエントリは Clojure Contrib Library Advent Calendar 18日目の記事です。) はじめに 今回のネタはtools.macroです。 tools.macroは,ライブラリのREADMEによれば「マクロを書くためのツール」という位置づけで,現在提供している主要な機能はmacrolet…

data.priority-mapを使ってダイクストラ法で迷路を解く

(このエントリは Clojure Contrib Library Advent Calendar 14日目の記事です。) はじめに 今回はdata.priority-mapについてです。以前はclojure.contrib.priority-mapと呼ばれていました。 data.priority-mapは優先度つきマップ(priority map)の実装を提供…

data.finger-tree: フィンガーツリー

(このエントリは Clojure Contrib Library Advent Calendar 13日目の記事です。) はじめに 今回はdata.finger-treeについてです。data.finger-treeは名前が示すとおり,フィンガーツリーの実装を提供します。Wikipediaによれば,フィンガーツリーは以下のよ…

core.rrb-vector: 新しいベクタの実装

(このエントリは,Clojure Contrib Library Advent Calendar 12日目の記事です。) はじめに 今回のネタはcore.rrb-vectorです。core.rrb-vectorは2013年1月にContribライブラリに入った比較的新しいライブラリです。 core.rrb-vectorが提供するのは,新しい…

tools.loggingを使ってSLF4J+Logbackでログをとる

(このエントリは, Clojure Contrib Library Advent Calendar 9日目の記事です。) 概要 今日紹介するライブラリはtools.loggingです。tools.loggingは,Javaで実装されたいくつかのロギングライブラリを,共通したインタフェースでClojureから使えるようにす…

core.matchを使って算術式インタプリタを実装する

(このエントリは Clojure Contrib Library Advent Calendar 8日目の記事です。) はじめに 今回のネタは,Clojureのパターンマッチライブラリであるcore.matchです。パターンマッチは,Lispのマクロの応用的な例として本などのネタで取り上げられることが多い…

tools.traceで実行トレースをとる

(このエントリは Clojure Contrib Library Advent Calendar 7日目の記事です。) 概要 今回はtools.traceについてです。tools.traceは実行トレースをとるのに便利な関数/マクロを提供するライブラリです。標準でデバッグ機能が弱いClojure上での開発で,シン…

進捗報告

(このエントリは 進捗Advent Calendar 6日目の記事です) 進捗どうですか? ダメです,とまではいいませんが,良いとも言い切れません。ギリギリの自転車操業な感じです。 Clojure Contrib Library Advent Calendar 元凶はなんといっても Clojure Contrib Lib…

data.jsonでJSONの読み書き

(このエントリは Clojure Contrib Library Advent Calendar 3日目の記事です。) はじめに 3日目の今日はdata.jsonについてです。 data.jsonは名前が示すとおり,JSON形式の読み書きをするために使います。以前はclojure.contrib.jsonという名前でした。ひと…

Clojure Contrib ライブラリとは

今年も残すところ1ヶ月となり,恒例のアドベントカレンダーの季節がやってきました。このエントリは,Clojure Contrib Library Advent Calendar 2013 の第1日目の記事です。今回は,Contribライブラリの概要について説明します。 contribライブラリとは そも…

CodeIQのRestricted Words問題をClojureで

CodeIQで次のような問題(通称「Restricted Words」問題)が出されていました。 標準出力に Hello World と出力するプログラムを作成して下さい。ただし、数値、文字及び文字列リテラルを解答に含めることはできません。 Perlのqqやqw、Rubyの%Q、%q、%wなども…

Clojureコンパイラの型推論器をとりだしてみる

clojure.orgには,Clojureについて次のような説明がある。 Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection. http://clojure.org/ この型推論(type…

MLのlet多相とか値制限とかよく分からなかったので調べてみた

世間はもうすぐ予定されているTAPLの日本語版の発刊に色めき立ってますね。関数型都市と呼ばれていた(る?)なごやでは、いいかげん動的型の言語ばっかやってられない雰囲気をヒシヒシと感じてるので、ぼちぼちと静的型付言語の勉強を進めています。 で、この…

gorubyライクな短縮形をClojureで

(このエントリはLisp Advent Calendar 2012 8日目の記事です。) gorubyとは gorubyはRubyに標準でついてくる、ゴルフ用のRuby処理系です。ゴルフ用というだけあって、普通のRubyに追加でゴルフに都合のいい機能をいくつかもっています。そのひとつに、「メソ…

Clojure(ある意味)基礎文法最速マスター

(このエントリはLisp Advent Calendar 2012 1日目の記事です。) はじめに 2年ほど前に、「◯◯言語基礎文法最速マスター」という、それぞれの言語の基本的な文法を説明したブログ記事を書くのが大流行した時期がありました。その流行り具合は、まとめ記事にま…

逆FizzBuzz問題をTrieでトライ

なにやら巷で逆FizzBuzz(Inverse FizzBuzz)問題というのが流行ってるらしい。 逆FizzBuzz問題 (Inverse FizzBuzz) - 猫とC#について書くmatarilloの雑記 F#で逆FizzBuzz問題 - Bug Catharsis わぁいInverse Fizzbuzz解けたよー - 這い寄るゆろよろ・アンド・…

Clojureでsyntactic closureを使ってhygienic macroを書くためのライブラリを作りました

という話。当初は実現可能性を示すことを目的にしていましたが、それなりに実用できそうな感じになってきたのでライブラリとしてまとめました。 athos/syntactic-closure · GitHub syntactic-closure 0.1.0 - Clojars hygienic macroとは? syntactic closur…

真・自然言語プログラミングの"the"演算子をClojureで

みなさん、明けましておめでとうございます。今年もよろしくお願いします(遅 さて、今回のネタは"the"演算子をClojureで実装してみたという話。"the"演算子といってもCommon Lispのtheではありません。 2年半ほど前に、FLTV(Future Language TV)という未来の…

重箱の隅的Clojureのイケてないところ

この記事はClojure Advent Calendar 2011 4日目の記事です。 Clojureには,シーケンスや組み込みのイミュータブルなコレクション型,STMなどエレガントだといわれる様々な特徴がある。一方で,ときにプログラマを悩ませるような厄介な挙動や不自由さを感じる…

Shibuya.lisp TT #7でLT発表してきました

遅ればせながら,10/22(土)に行われたShibuya.lispの第7回テクニカルトークに参加した報告。いつの間にか1週間も過ぎていましたね(^^; Shibuya.lispテクニカル・トーク#7 : ATND Shibuya.lispのテクニカルトークももう7回目ということですが,東京が遠いのと…

Clojure 内部で使われる中間形式 Expr について分かったこと

最近,暇を見つけてClojureのコンパイラを読んでいる。まだよく分かっていない部分もたくさんあるけれど,今まで読んできた中で分かったこと,特にClojureの内部で使われている "Expr" という中間形式についてまとめておく。 Expr って何? Clojureの内部で…

Nailgun/GroovyServを使ってClojureの起動を高速化する

JVM上で動作する言語(処理系)にはよくある話だけれど,Clojureの起動は遅い。下の結果は手元の環境で実行した場合の例。 $ repeat 5 time java clojure.main -e '(println "Hello, Clojure!")' Hello, Clojure! java clojure.main -e '(println "Hello, Cloj…

「ClojureでJavaクラスのコンストラクタをapplyする」をリフレクションで

元ネタは1年前の記事。 ClojureでJavaクラスのコンストラクタをapplyする - 水底で思うこと 解決方法 -> ClojureでJavaクラスのコンストラクタをapplyする - 地獄の猫日記 ClojureからJavaのコンストラクタを呼ぶ場合, (new Hoge foo bar) または (Hoge.…

ぷよぷよ19連鎖の問題を Clojure で

去年、迷路を最短経路で解く問題を出題していたところが、今年も採用一次試験の問題を公開しているというのでClojureで解いてみた。 問題は以下のとおり。 ゲーム「ぷよぷよ」で、フィールドの状態がテキストで与えられたとき、消える「ぷよ」を消して次のフ…

Rubyで末尾再帰最適化をする。

元ネタはPythonで末尾再帰最適化をする。 - wasabizの日記。Pythonのデコレータを使って、末尾再帰で書かれた関数に対して末尾呼び出し最適化(TCO)を行う、というものです(どうやってTCOを実現しているかの詳細についての説明はここでは割愛します)。さて、…

暗黙の引数 &env を使ってスコープを曲げてみる

昨日に引き続き、Clojureマクロの暗黙の引数&envについて。&envを通してマクロ呼び出しのフォームを囲む環境が手に入るわけで、これを利用しておもしろいことはできないだろうか。そう考えているうちに、スコープを曲げる - 主題のない日記で出てきた例を思…

マクロの暗黙の引数 &form と &env

Varの適用 Clojureでは、たとえば (#'list 1 2 3) が (list 1 2 3) と同じ結果を返す。Varに関数が束縛されている場合には、Varに束縛されている関数がそのまま適用されるようだ。では、Varにマクロが束縛されている場合にはどうなるだろう?マクロを展開し…

インライン Brainfuck をモナドっぽいなにかで

タイトルは釣り気味?なんとなくStateモナドのつもりで書いていたけど、これをモナドと呼ぶのかは謎。メインのアイディアは、Brainfuck の各命令を関数で表し、メモリやポインタといった Brainfuck の実行に必要な状態を引き渡していくというもの。つまり、…

gaucheyライブラリ

今日はShibuya.lispのHackathonがあったようです。東京には行けなかったんですが、時間中(13:00 - 17:30)は時間をとってリモートで勝手に参加させてもらってました。時間中はひたすらClojureを書いていました。gaucheyという、Gaucheにバンドルされたライブ…

(nagoya-lisp 0) やりました

第0回 nagoya-lisp をやりました。(nagoya-lisp 0) : ATND今回は、とりあえず次回から何をやるのかを決める準備の回でした。わりと話し合いがメインの回だったのにホワイトボード等ない場所での開催となったので、Google docsで議事録を共有しつつ進める形に…

nagoya-lisp やります!

名古屋を中心とした Lisp 系言語の勉強会をやろうと思います。(nagoya-lisp 0) : ATND 日時 2010/10/16 18:00〜19:30(予定) 場所 名古屋市栄の Cafe どえりゃあ 初回の予定 今後勉強会で何をやっていきたいかについての作戦会議 具体的に何をやっていくのか…

わーい、テトリス言語 Tetrlang 完成したよー\(^o^)/

これはなに? Tetrlang は、研究の中間発表を1週間後に控えた大学院生の現実逃避によって作り出された言語テトリスにインスパイアされた言語です。Tetrlang は以下のような特徴をもつ言語です。 各命令がテトリスのブロック(テトラミノ)によって表される 他…

Lisp in Small Piecesを読んだ

読み終わったのは3週間くらい前だけど、ゴールデンウィークで普段よりは時間があるので、読んだ感想など書いてみる。Lisp in Small Pieces作者: Christian Queinnec,Kathleen Callaway出版社/メーカー: Cambridge University Press発売日: 2003/12/04メディ…

麻雀の待ちを出力する問題を amb で

毎度流行りには乗り遅れる傾向にあるけど、麻雀の待ちを出力する例の問題をいまさら解いてみる。「バックトラックするだけの問題なら amb 使えば楽勝でしょ」と思って amb を使ってやってみたんだけど、思いのほかてこずった。しかも、なんだかうまく頭を切…

Gambitでクロージャをシリアライズ

できるよという話。Gambitに強力なシリアライズ機能が付いていることをyieldした途中の状態をファイルに保存とかって出来ますか - 崩壊現実-全てはvirtualに収束する-を見ていてふと思い出したので、クロージャを使って同じようなことを試してみた。 (define…

迷路を最短経路で解く問題を Clojure で

Clojure といえば、巷ではProgramming Clojureの日本語訳である「プログラミング Clojure」の献本が行われているようで、これが発売すればいよいよ日本でも本格的に Clojure が広まっていくんじゃないでしょうか。というわけで、スタートダッシュ(というかフ…

噂の「英単語を覚えるスクリプト」をClojureで

第1回 Scheme コードバトンのお知らせ - Higepon’s blogでネタとして挙がっている英単語を覚えるスクリプトをClojureで書いてみた、という話。コード自体はid:higeponさんのScheme(R6RS)版をほぼそのままClojureに移植しただけ。 ソースコード (追記:ソース…

継続とマクロでお手軽ブレークポイント

継続によるプログラムの実行の中断・再開と、LOL の pandoric macro (クロージャに捕捉されている自由変数に、クロージャの外側からアクセスするためのマクロ) を組み合わせて簡単なブレークポイントっぽいものを作ってみました。 使い方 以下のようにして使…

Gaucheでシェルスクリプト

最近、Let Over Lambda (LOL) という本を読んでます。Let Over Lambda作者: Doug Hoyte出版社/メーカー: Lulu.Com発売日: 2008/04/30メディア: ペーパーバック購入: 1人 クリック: 14回この商品を含むブログ (6件) を見るLOLは、On Lispの発展(?)としてLisp…

Gauche-FUSE試してみた

id:GemmaさんがGauche-FUSEというライブラリを作ったようなので試してみた。exampleのhello.scm, fusexmp.scmについては問題なく動いたのだけど、outputz.scmがうまく動かない。実行すると以下のようなエラーが出る(追記:勘違いでした。ちゃんと動いている…

プログラミング言語の難易度

Javaはわりと素朴な言語だ。 Rubyは簡単な英語をちょっと知っていれば分かってしまうくらい易しい。Perlもまぁだいたい同じくらいだ。 Cなんて、小学生でも、ともすれば幼稚園児でも、理解が可能だ。 C++やC#なんかは慣れない人は戸惑ってしまうかもしれない…

Scalaって末尾再帰の最適化してるの?

Scalaの勉強中。Scalaはオブジェクト指向でありながら、関数的にもプログラムを書けるという特徴を持っているとのことで、「だったら末尾再帰は最適化されるよね?」ってことでバイトコードがどうなってるのか調べてみた。 結論からいえば、d:id:mzp:2008111…

lim[n→∞]√2↑↑n=2

日曜日にCSNagoyaのSICP勉強会に参加していて、タワー記法が出てきた流れで、だ(と思う)という話をしたら、id:yoshihiro503さんとid:mzpさんから意外とよい反応をいただいた。 証明をちゃんとつけてなかったのだけど、帰り道で考えていたらわりと簡単に証明…