Lambdaカクテル

集団への盲従を激しく嫌う

common lisp

Common Lispでリードマクロしてみた

common lispではマクロによって式を変形することでプログラムを柔軟に書くことができる.今回はリードマクロを使って,便利なデバッグプリントを実装したい. 柔軟なマクロ,それがリードマクロ 定義方法が2種類あります 普通の関数をマクロの本体に仕上げて…

Dockerでqlotを使うときに必要なもの

qlotはライブラリを管理してくれる便利なやつだが,dockerで使うとなると忘れがちな点がいくつかあり,よくハマるのでメモしておく. qlfile まあこれは忘れないだろう.これがないとqlot installできないので,COPYする必要がある. # Dockerfile COPY qlfi…

Common Lispで直線と交点を描画する(lispbuilder-sdl)

交差するときは丸を表示する 交差しないときは表示しない こういうのを作った mf-atelier.sakura.ne.jp 上記サイトを参考にして,固定した線分と,一点がマウスで操作できる線分との交点を表示するコードを書いた. 図形描画ライブラリには lispbuilder-sdl …

openSuSE Tumbleweedでlemを動かす(ncursesトラブル)

lemを動かすのにちょっと苦労したのでメモ. TL;DR ros install cxxxr/lem vi ~/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-****/src/low-level/curses-bindings.lisp "libncursesw.so.6"を読み込んでいる箇所をコメントアウトし,libncur…

Common Lisp困りどころ その2: ClozureCLのファイルパスのエンコーディング

台風の風がするどい.実家の九州では珍しくもないことだが,関西でこれほどの風が吹くのは久しぶりだ. さて今回ClozureCLの日本語処理でハマったのでメモしておく. シチュエーション OSはFreeBSD 11.1 ファイルシステムはZFS 処理系はClozureCL 1.11(roswe…

Common Lisp困りどころ その1: `package-inferred-system`

Common Lispは良い言語だが,初心者が必ず陥る困りどころがいくつかあり,これで出鼻を挫かれるようなことがあってはいけないと思っている. そこで,この困りどころを提示することによって,よりよい解決方法や回避策がインターネットを通じて集ってくるの…

Linking emacs SLIME and docker-compose with SWANK server -- modern Common Lisp development

Better translation here: https://kvantos.github.io/#articles_en/emacs-slime/ Emacs works quite well with Common Lisp. We can use REPL and autocompletion feature connecting to new Common Lisp implementation or working implementation; SLIME …

SWANKサーバによるEmacs SLIMEとdocker-composeとの連携 -- 現代的なCommon Lisp開発

EmacsとCommon Lispとの相性は抜群に良い. SLIMEというプラグインを使うと,Emacs上でCommon Lisp処理系を立ち上げて接続したり,既に起動している処理系に接続したりすることで,REPLや補完を動作させられる.このEmacsとCommon Lisp処理系との接続は,処…

Common Lispで木構造の一部にパターンマッチさせてみた(optima)

パターンマッチングライブラリのoptimaで遊んでみた。ちょっと応用して入れ子になったリストの一部分にパターンがマッチするか検査する処理を書いてみた。将来的にはパースしたHTMLの部分マッチさせて抽出する処理に使ってみたい。 まずこういうリストがある…

PerlのScope::GuardをCommon Lispで実装するぞ!!!

tl;dr: 実装したけど限定的にしかうまく動かなかった。PerlのScope::Guardについて既に良く知っている人は、最後の節まで飛ばしてもよい。 Server::Starter読んでた サーバプロセスを起動するツールであるServer::Starterの内部がどうなっているのか知りたく…

Common LispのWebフレームワーク「Caveman2」のリクエスト処理を眺める

Common LispのWebフレームワークであるCaveman 2で遊んでいる. 今日は,リクエストの前後に処理を挿入し,レスポンスヘッダをいじったりしてみるお話. ある程度Common Lispが分かりますよ,というくらいのレベル感です.僕のレベルは,マクロが書けてうれ…

Common Lispでホットリロードを行うために必要な要素

SIGHUPを受け取るとリロードするという挙動はサーバプログラムによくあるものですが,Common Lispでもこれができます.しかも唯のリロードではなく,ソースコードを含めたホットリロードです. asdf:load-systemはシステムをロードするので,実行中のシステ…

Common Lispのread-lineがパイプ/リダイレクトを受け付けなくて困っている

read-lineとパイプ処理の組合せでつまづいて分からないままの箇所があるので記録する. ご存知read-lineは,ストリームから1行読み込む重要な関数だ. そしてパイプは,前のコマンドの標準出力を次のコマンドの標準入力に接続させるという,linux/unixを使っ…

Common Lispで動くブルームフィルタ作った

ブルームフィルタとは,そのフィルタに要素が登録されているかを確率的に判定し,そのフィルタに要素が登録されていないことを確実に判定できるデータ構造である.ブルームフィルタは要素が登録されているかを判定することはできるが,その要素を取り出すこ…

Common Lispライブラリ紹介: lparallel(並列化コレクションほか)

巨大なベクタやリストのmapなどはシングルコアで動作させるにはもったいないが、手動で並列化を行うのは骨が折れる作業だ。 速度面でのボトルネックになっている部分を高速化できれば,効率的に処理を行うことができる. lparallelは並列・並行処理に関する…

Common Lisp開発序ノ口 〜プロジェクトの作成と実行〜

この記事は,はてなエンジニア Advent Calendar 2017の12日目の記事です。 前日は id:cohalz さんによる 学生がエンジニアで仕事をして知識を増やすこと - cohаlz.hatеnablоg.сom でした。 概要 最近Common Lispで色々な実験をしています. Common Lispをは…

`UIOP:with-temporary-file` つかいどころ

使う機会があったので備忘録. https://github.com/fare/asdf/blob/master/uiop/stream.lisp に実装されて いる. with-temporary-file は,一時ファイルを作成してシンボルにパス名かスト リームを束縛する. :stream か :pathname かのどちらかを少なくと…

Docker環境のJenkinsの中でDockerコンテナを立ててRoswell(on Alpine Linux)を動かす

ひとまずテストを走らせることができたのでメモ. TL;DR RoswellはCommon Lispの処理系などの便利なラッパー. root権限でJenkinsコンテナを動かすこと Alpineはユーザまわりが弱い JenkinsfileからDockerクライアントを起動させる DockerはRoswellが動くコ…

『実践Common Lisp』買った

最近Common Lispをはじめた。昔GaucheというScheme処理系を触った(本当に触った程度だったが)ことがあり、またEmacsを使っている以上Elispを書くこともしばしばであったのでLispにはある程度親近感があったのだが、Common Lispで開発したことはなかったし、…

Common LISP環境構築メモ(SBCL, Quicklisp, ASDF2, SLIME)

備忘録としてのメモ. Common LISPは実用的とよく言われるが触ったことがなかったので,学習してみようと思った. 今回は環境構築をやる. 追記 2017/04/07 Roswellについて追記 目次 追記 目次 処理系インストール Hello, World Quicklisp(ライブラリマネー…