2015-01-01から1年間の記事一覧

2015年に作っていたもの

2015年に作ったものまとめ。1つ例外を除いて全部Common Lispでした。 全体的に飽き性っぷりが垣間見えるだけな気もしますが、来年どれかは発展させていきたいです。 オセロ (旧版:sample-of-eshamster/othello-cl · GitHub) github.com 作るものに困った…

2015年の斑鳩

せっかくブログを作ったので斑鳩についても2015年のまとめ。 目標と進捗 特にデスクトップPCがお眠りになって以来、Lispと音ゲーにかまけてほぼサボっていました…*1。 3400万という次なる理想に対する以下の小目標(後付け)はどれも道半ばといったところで…

マクロ展開時に副作用を起こすことの恐ろしさ

Lisp Advent Calendar 2015の23日目の記事です。 qiita.com すごく及び腰でしたが、ずっと空いていたので、えいやで登録してみました。 マクロ展開時に副作用を起こすな危険、という内容です。 前書き On Lisp: マクロのその他の落し穴によると、「Lispは,…

SBCLとCCLの違い:defstructのincludeにおけるスロット名の比較方法

Common Lispの構造体定義マクロdefstructでは、:includeで別の構造体のスロット名やその初期値を引継ぐことができます。このとき、下記の(a 100)のように初期値を上書きできます。 CL-USER> (defstruct parent (a 10) (b 20)) PARENT CL-USER> (defstruct (c…

Common Lispでマクロ展開時エラーをテスト

前回記事の「Parenscriptで少し遊んで見る (5)defstruct編 - eshamster’s diary」ではdefstruc.psマクロ内で展開時のエラー処理を入れたので、テストも一緒に作っています。このときに、マクロ展開時のエラーをテストする方法が意外と見つからなかったので…

Parenscriptで少し遊んで見る (5)defstruct編

Parenscript(PS)用にdefstructのサブセットを作った話です。例によってParenscript拡張の実験場、ps-experimentプロジェクトで実装を試みています。今回の記事時点のタグblog-play-ps-5をつけています。 github.com 前書き:Parenscript拡張の方針 ここま…

Parenscriptで少し遊んで見る (4)続・defun編

背景 第一回では、ps環境の外側でdefunするためのdefun+psを用意しました。そして、それをまとめてJavaScriptに出力するためのwith-import-ps-defマクロを作ったわけですが、出力する関数名を一々指定する必要がありました。 いったんはそこで妥協したのです…

Parenscriptで少し遊んで見る (3)キャメルケース編

リードマクロによるキャメルケース 今更ですが、Parenscriptでは大文字を表現するために、文字の直前にハイフンを置きます。 CL-USER> (ps (@ document get-element-by-id)) "document.getElementById;" Common Lispでは通常シンボル名は大文字として解釈さ…

Parenscriptで少し遊んで見る (2)ドット記法編

@マクロが長い Parenscriptを書いていると真っ先に気になってくるのが@マクロです。下記の最初の例のように一つ程度ではそうでもないですが、いくつか並ぶと主張が激しく気になってきます。newに至っては単体でもだいぶ見づらいです。 CL-USER> (import 'ps:…

Parenscriptで遊んで見る (1) defun編

TypeScriptやCoffeeScriptといったJavaScriptを吐き出す言語の名前をしばしば聞きます(まだ使ったことはないです…。)が、Common LispにはParenscriptというものがあります。少しいじってみていたのですが、defun周りが気になったので少し遊んでみたという…

Common Lispでナイーブベイズをナイーブに実装

精度を問わず簡単に使える分類器が欲しかったので、Common Lispでナイーブベイズ分類器cl-naive-bayesを作りました。 github.com 使い方は簡単です。まずは学習。学習結果を保持するlearned-storeを用意した後は、learn-a-document関数にこのstore,ドキュメ…

Let Over Lambdaのnlet-tailがよく分からなかったのでメモ

在庫切れになっていたLet Over Lambdaの訳本にオンデマンド版なるものが出ていることに気付いたので買って読んでいます。 LET OVER LAMBDA―Edition 1.0作者: ダグホイト,Doug Hoyte,タイムインターメディアHOPプロジェクト出版社/メーカー: エスアイビーアク…

引数文字列をinternするアナフォリックマクロでハマったこと

CSVファイルを処理するために、引数の文字列をシンボル化して(intern)束縛するアナフォリックなマクロを書いていてハマったことのメモ。シンボルとパッケージの関係は段々と分かってきたつもりでしたが、まだまだハマるときはハマりますね。 悪い例 例のた…

Common Lispで遅延評価を作って遊ぶ(4, 完) - 数列生成リードマクロ

今回の目的 第3回(その1、その2)では、作成した数列生成リードマクロでひとしきり遊んでみたわけですが、今回はそのリードマクロの話を書きます。なお、リードマクロそのものについて(浅く)理解した内容については別記事「リードマクロ入門、の10分の1歩…

AngularJSでアコーディオンパネルを作成

目的 いわゆるアコーディオンパネルが欲しかったのですが、MEANスタックなんて言葉を聞いてちょっと興味があったので、AngularJSで作ってみました。これだっというサンプルが意外に見つからなかったので一応メモに残しておこうと思った次第です。要件はおお…

Caveman2でCL-Markupを使う準備

目的 何か作ってみようかとCommon LispのWebフレームワークCaveman2を使い始めてみました。デフォルトのテンプレートエンジンとしてDjulaがサポートされていますが、閉じタグ書くなんて面倒くさい…と思い、CLで記述できるCL-Markupの利用を考えています。こ…

リードマクロ入門、の10分の1歩ぐらい後か前

Common Lispで遅延評価を作って遊ぶ(1) - eshamster’s diaryシリーズ付録 今回の目的 遅延評価で遊ぶシリーズでリードマクロの話に入ろうとしたのですが、リードマクロ自体について学んだことを書くだけで長くなりそうなので記事を分けました。この辺りが…

Common Lispで(簡易)RSS解析

前書き ちょっとCommon LispでRSSでも解析してみようかとRoswellスクリプト(紹介記事, GitHub)を書きました。 コード ※2015/09/13追記:roswellでインストールできる複数環境(ccl, clisp, sbcl)で試した見たのですが、cclでしか動かないようです。SBCLは…

F#でMAL(Make a Lisp)を実装し始めた

MAL with F 少し前に1週間ほど休めたので前々から興味のあったMAL(Make a Lisp)(LISPインタプリタ)を前々から興味のあったF#で実装しはじめました。連休中になんとかStep4までは完了させた(テストでOptionalになっているものは無視)ので、途中で思ったこ…

Common Lispで遅延評価を作って遊ぶ(3-2) - 素数列で遊ぶ (数列で遊ぶ - その2)

今回の目的 ここまでに作ったcl-lazyライブラリを使って、こまけーことはいいんだよ、の精神で色々な(数)列を作って遊んでみたいと思います、第二回。数といえば自然数、自然数といえば素数、ということで素数列を作ってみます。 前回と同じく、冗長なので…

Common Lispで遅延評価を作って遊ぶ(3-1) - (数)列で遊ぶ、その1

今回の目的 ここまでに作ったcl-lazyライブラリを使って、こまけーことはいいんだよ、の精神で色々な(数)列を作って遊んでみたいと思います。気ままに遊んでいたら思いの外に長くなったので適当に2回に分けようと思います。 なお、以下では冗長なのでREPL…

Common Lispで遅延評価を作って遊ぶ(2) - 数列生成マクロ

目的:より直感的に数列を作成する 前回遅延評価ライブラリを作って無限長数列を作成することができました。フィボナッチ数列の定義を再掲すると以下のようになっていました(Warning等の出力は省略)。 CL-USER> (defun fib (a b) (lcons (+ a b) (fib b (+…

Common Lispで遅延評価を作って遊ぶ(1)

目標:無限長数列 遅延評価というものを始めて耳にしたのはHaskellの入門書*1ですが、印象的だったのはやはり"[1..]"、ご存知無限リストですね。CやC#の世界で平和に暮らしていた人間にとっては中々衝撃的でした。 ということで、Common Lispで遅延評価(Laz…

このブログについて

動機など プログラムを書いていて調べたことなどのメモを残そう、というのがブログを始めようと思った主な動機です。今まではプライベートなWikiにだけ書いていたのですが、まあ隠してもしょうがないかと思い始めました。細々と続けられればと思います。 最…