2015-01-01から1年間の記事一覧
2015年に作ったものまとめ。1つ例外を除いて全部Common Lispでした。 全体的に飽き性っぷりが垣間見えるだけな気もしますが、来年どれかは発展させていきたいです。 オセロ (旧版:sample-of-eshamster/othello-cl · GitHub) github.com 作るものに困った…
せっかくブログを作ったので斑鳩についても2015年のまとめ。 目標と進捗 特にデスクトップPCがお眠りになって以来、Lispと音ゲーにかまけてほぼサボっていました…*1。 3400万という次なる理想に対する以下の小目標(後付け)はどれも道半ばといったところで…
Lisp Advent Calendar 2015の23日目の記事です。 qiita.com すごく及び腰でしたが、ずっと空いていたので、えいやで登録してみました。 マクロ展開時に副作用を起こすな危険、という内容です。 前書き On Lisp: マクロのその他の落し穴によると、「Lispは,…
Common Lispの構造体定義マクロdefstructでは、:includeで別の構造体のスロット名やその初期値を引継ぐことができます。このとき、下記の(a 100)のように初期値を上書きできます。 CL-USER> (defstruct parent (a 10) (b 20)) PARENT CL-USER> (defstruct (c…
前回記事の「Parenscriptで少し遊んで見る (5)defstruct編 - eshamster’s diary」ではdefstruc.psマクロ内で展開時のエラー処理を入れたので、テストも一緒に作っています。このときに、マクロ展開時のエラーをテストする方法が意外と見つからなかったので…
Parenscript(PS)用にdefstructのサブセットを作った話です。例によってParenscript拡張の実験場、ps-experimentプロジェクトで実装を試みています。今回の記事時点のタグblog-play-ps-5をつけています。 github.com 前書き:Parenscript拡張の方針 ここま…
背景 第一回では、ps環境の外側でdefunするためのdefun+psを用意しました。そして、それをまとめてJavaScriptに出力するためのwith-import-ps-defマクロを作ったわけですが、出力する関数名を一々指定する必要がありました。 いったんはそこで妥協したのです…
リードマクロによるキャメルケース 今更ですが、Parenscriptでは大文字を表現するために、文字の直前にハイフンを置きます。 CL-USER> (ps (@ document get-element-by-id)) "document.getElementById;" Common Lispでは通常シンボル名は大文字として解釈さ…
@マクロが長い Parenscriptを書いていると真っ先に気になってくるのが@マクロです。下記の最初の例のように一つ程度ではそうでもないですが、いくつか並ぶと主張が激しく気になってきます。newに至っては単体でもだいぶ見づらいです。 CL-USER> (import 'ps:…
TypeScriptやCoffeeScriptといったJavaScriptを吐き出す言語の名前をしばしば聞きます(まだ使ったことはないです…。)が、Common LispにはParenscriptというものがあります。少しいじってみていたのですが、defun周りが気になったので少し遊んでみたという…
精度を問わず簡単に使える分類器が欲しかったので、Common Lispでナイーブベイズ分類器cl-naive-bayesを作りました。 github.com 使い方は簡単です。まずは学習。学習結果を保持するlearned-storeを用意した後は、learn-a-document関数にこのstore,ドキュメ…
在庫切れになっていたLet Over Lambdaの訳本にオンデマンド版なるものが出ていることに気付いたので買って読んでいます。 LET OVER LAMBDA―Edition 1.0作者: ダグホイト,Doug Hoyte,タイムインターメディアHOPプロジェクト出版社/メーカー: エスアイビーアク…
CSVファイルを処理するために、引数の文字列をシンボル化して(intern)束縛するアナフォリックなマクロを書いていてハマったことのメモ。シンボルとパッケージの関係は段々と分かってきたつもりでしたが、まだまだハマるときはハマりますね。 悪い例 例のた…
今回の目的 第3回(その1、その2)では、作成した数列生成リードマクロでひとしきり遊んでみたわけですが、今回はそのリードマクロの話を書きます。なお、リードマクロそのものについて(浅く)理解した内容については別記事「リードマクロ入門、の10分の1歩…
目的 いわゆるアコーディオンパネルが欲しかったのですが、MEANスタックなんて言葉を聞いてちょっと興味があったので、AngularJSで作ってみました。これだっというサンプルが意外に見つからなかったので一応メモに残しておこうと思った次第です。要件はおお…
目的 何か作ってみようかとCommon LispのWebフレームワークCaveman2を使い始めてみました。デフォルトのテンプレートエンジンとしてDjulaがサポートされていますが、閉じタグ書くなんて面倒くさい…と思い、CLで記述できるCL-Markupの利用を考えています。こ…
Common Lispで遅延評価を作って遊ぶ(1) - eshamster’s diaryシリーズ付録 今回の目的 遅延評価で遊ぶシリーズでリードマクロの話に入ろうとしたのですが、リードマクロ自体について学んだことを書くだけで長くなりそうなので記事を分けました。この辺りが…
前書き ちょっとCommon LispでRSSでも解析してみようかとRoswellスクリプト(紹介記事, GitHub)を書きました。 コード ※2015/09/13追記:roswellでインストールできる複数環境(ccl, clisp, sbcl)で試した見たのですが、cclでしか動かないようです。SBCLは…
MAL with F 少し前に1週間ほど休めたので前々から興味のあったMAL(Make a Lisp)(LISPインタプリタ)を前々から興味のあったF#で実装しはじめました。連休中になんとかStep4までは完了させた(テストでOptionalになっているものは無視)ので、途中で思ったこ…
今回の目的 ここまでに作ったcl-lazyライブラリを使って、こまけーことはいいんだよ、の精神で色々な(数)列を作って遊んでみたいと思います、第二回。数といえば自然数、自然数といえば素数、ということで素数列を作ってみます。 前回と同じく、冗長なので…
今回の目的 ここまでに作ったcl-lazyライブラリを使って、こまけーことはいいんだよ、の精神で色々な(数)列を作って遊んでみたいと思います。気ままに遊んでいたら思いの外に長くなったので適当に2回に分けようと思います。 なお、以下では冗長なのでREPL…
目的:より直感的に数列を作成する 前回遅延評価ライブラリを作って無限長数列を作成することができました。フィボナッチ数列の定義を再掲すると以下のようになっていました(Warning等の出力は省略)。 CL-USER> (defun fib (a b) (lcons (+ a b) (fib b (+…
目標:無限長数列 遅延評価というものを始めて耳にしたのはHaskellの入門書*1ですが、印象的だったのはやはり"[1..]"、ご存知無限リストですね。CやC#の世界で平和に暮らしていた人間にとっては中々衝撃的でした。 ということで、Common Lispで遅延評価(Laz…
動機など プログラムを書いていて調べたことなどのメモを残そう、というのがブログを始めようと思った主な動機です。今まではプライベートなWikiにだけ書いていたのですが、まあ隠してもしょうがないかと思い始めました。細々と続けられればと思います。 最…