ltk と Tk との接続

管理者権限の無いマシンで Common Lisp の GUI 開発をする場合,GUI ツールキットをローカル・ディレクトリにインストールせざるを得ない.管理者権限の無いマシンで ltk を使う必要に迫られたので,Lisp コードからどのように Tk を呼び出しているのか調べてみた. .... »

Lisp のストリームあれこれ

peek-char の便利な機能 ストリームから文字を peek する際,peek-char の第 1 引数に t を指定すると空白文字をスキップしてくれる.次に read-char を実行すると,スキップ後の 1 文字を返す. .... »

ASDF3 on Clozure CL does not search ASD files under the symbolic links

I put all my lisp projects under the directory git-repos and set symbolic links to each projects from ~/common-lisp. ASDF3 on SBCL loads ASD files under the symbolic links recursively while that on Clozure CL doesn’t. If you add those links to source-registry they get loaded on CCL too. Here is the snipped for CCL to add all the links and directories under ~/common-lisp. .... »

Lisp の Sequence 型のまとめ

Common Lisp のソート関数や探索関数は,引数にシーケンス(SEQUENCE)型のオブジェクトを取る.シーケンス型はベクトル(VECTOR)型とリスト(LIST)型の抽象型なので,ベクトルとリストのいずれもそれら関数に渡すことが出来る.では配列(ARRAY型)を引数に渡したい場合はどうか? Common Lisp ではベクトルは 1 次元配列と同じなので,シーケンスを引数に取る関数に 1 次元配列を渡すのは問題ない. Common Lisp における配列とベク .... »

コードリーディング: Lack の Session ミドルウェアを理解する

Webアプリケーションを構築する際にはユーザのセッション管理が必須である.今回は lack-middleware-session のソースを読みながらSessionミドルウェアの使い方を学ぶ.本稿の最後ではSessionミドルウェアを使ったサンプルWebアプリケーションを構築する. Sessionミドルウェアの概観 Sessionミドルウェアはセッション変数として,文字列をキーにしたハッシュテーブルを提供する.つまり,セッション毎にハッシュテーブル .... »

Roswell 環境下でのローカル・プロジェクト管理入門

この記事は Lisp Advent Calendar 2017 の4日目の記事として書かれました.コメント,質問等は @waterloo_jp まで. 「 Lisp のパッケージ管理入門.Quicklisp,ASDF,Roswell の違いなど 」では,Quicklisp,ASDF,Roswell の違いを説明し,Roswell の導入部分を解説しました.ここでは,もう少し踏み込んで,自分で開発するプロジェクト(ローカル・プロジェクト)を Roswell の環境下で管理する方法を説明します.本稿の最後で .... »

Lisp で CouchDB の Getting Started を始めてみる

CouchDBオフィシャル・ドキュメントの Getting Started をLispを使ってやってみた.CouchDBはRESTfulなAPIを提供しているので,特別なドライバを使わなくてもHTTPクライアントがあればDBを操作できる.ここでは,LispのHTTPクライアント・ライブラリ Dexador と,高速なJSONエンコード/デコード・ライブラリ Jonathan を使って,CouchDBと通信する.どちらも日本を代表する若手Lisperによって書か .... »

コードリーディング: Lack の Mount ミドルウエアを理解する

前回 は Lack のアプリケーションのコードを追い,ミドルウェアの使われ方を理解した.今回はミドルウェアを一つ取り上げる.今回取り上げるのはMountミドルウェア(lack-middleware-mount)で,リクエスト・パスに応じたルーティングを司る.最初にミドルウェアのソースを読み,最後にMountミドルウェアを使ったサンプルWebアプリを作成する.コメント,間違いのご指摘等は [@waterloo_jp](https://twitter.com/waterloo_jp) まで. .... »

Lispの変数とシンボルは同じか?

David S. Touretzkyの"COMMON LISP: A Gentle Introduction to Symbolic Computation"では,変数に値を代入するという言葉を使い,束縛という言葉を使いません.同書158ページには「シンボルは値と束縛されない.変数だけが値と束縛されうる(Symbols are never bound; only variables can be bound)」と,意味深なことを言っています.そこで,シンボル,変数,束縛について調べてみました. まず,ANSI X3J13のFinal Draftによる .... »

wshito on #lisp,

Lispのダイナミック・スコープとスペシャル変数

Common Lispのダイナミック・スコープについて勉強したのでまとめてみた.まず,要点は以下の通り. Lispのスコープは,レキシカル・スコープとダイナミック・スコープの2種類ある. ダイナミック・スコープに従う変数をスペシャル変数という. スペシャル変数は defvar か defparameter によって作成される. スペシャル変数と同名の変数が作成されると,スコープを超えて同名のスペシャル変数全てが新しい変数を参照する.つまり,スコープを超えて .... »

wshito on #lisp,

Lispのパッケージ管理入門.Quicklisp,ASDF,Roswellの違いなど

Lispを始めたばかりで,まだ規模の大きいプログラムを書いていないため,パッケージ管理やらライブラリの依存関係解決などわからないことだらけで,QuicklispやASDF,CIM,Roswell等,色々調べました.包括的かつ初心者に優しいリソースがなく,最初は苦労しました.解説がどれも各ツールの使い方に特化していて,他のツールの関係や,どのツールが必要で,どの機能が重複しているかなどの解説がなかっ .... »

「対話によるCommon Lisp入門」第6話まとめノート

本章ではリスト処理を行う関数を再帰を使って書く練習をしながら,関数の処理時間の見積もり方と最適なコードのへの書き換え方を学ぶ.本ページではまず第5話と6話の間に挿入されたLispのコンパイル方法と,第6話で説明されている関数のトレースの仕方についてまとめ,その後,処理時間の見積もり方と,効率的なコードへの書き換えについてまとめる. Lispのコンパイル方法 REPLで作業をしている時,定義済みの関数や .... »

「対話によるCommon Lisp入門」第5話まとめノート

この章では再帰の基本から,末尾再帰への書き換え方について解説している.またエディタにプログラムを書いてLispインタプリタに読み込む方法も説明している. 末尾再帰とは 再帰的に定義された関数の末尾で,自分自身を呼び出した戻り値をそのままリターンする関数定義. 末尾再帰の例(ユークリッドの互除法) (defun gcd2 (m n) (if (= (mod m n) 0) n (gcd2 n (mod m n)))) 最後の行で自分自身`gcd2`への呼び出しで終わっている.すなわち,自分自身へ .... »

「対話によるCommon Lisp入門」第4話まとめノート

この章ではリストから要素を取り出す方法と,要素からリストを構築する方法について書かれている.car,cdr,cons の基本関数以外に,便利な関数が幾つか紹介されている. 要素の取り出し first, second, …​., tenth 第1要素から第10要素まで簡単に取りだす関数が用意されている. elt Element関数はリストから任意位置の要素を取り出せる.位置のインデックスは0から数える. > (elt '(0 1 2 3 4 5) 3) 3 last リストの末尾の要素を取り出す. 末 .... »

「対話によるCommon Lisp入門」第3話まとめノート

Lispのデータ型 リスト以外はアトム(1つだけ例外あり?p.24). NULL型はリストでありシンボルである. NULL型のリストは空リスト()でNILと同値. NULL型のデータはシンボルNILのみ. シンボルNILの値もNIL. フォームとデータ (p.32) Lispはプログラムもデータもリストで表現できるからややこしく見える. リストなどの表現をデータとしてではなく,プログラムのつもりで見ている時は,その表現を *フ .... »

「対話によるCommon Lisp入門」第2話まとめノート

関数と変数の作成 defun 関数定義 全ての引数は評価されない(マクロで通常の関数ではない). setf 変数への代入 変数宣言なしで新たに変数が作れる.トップレベルで使えばスペシャル変数(大域変数),関数内で使えばレキシカル変数(ローカル変数)を作れる.第1引数は評価されない(マクロで通常の関数ではない). 共通点 どちらも副作用がある.つまり処理をして値を返すだけでない. defunは関数を実行できるよう定義する副作用を持 .... »