Common Lisp

【マクロ小ネタ】Common Lisp で defer してみる

時には実用を考えずにマクロを書いて遊んでいると楽しいというだけの記事です。 Go言語の defer が簡単に実装できそうな気がしたので書いてみました。と思っていたら、途中で記事後半の事実に気付いて思ったよりも長くなりました。 defer の単純な模倣 Go言…

【小ネタ】 簡易な関数定義マクロ, マクロ定義マクロを自作してみる

defunまでマクロで出来ているということはユーザがその気になれば関数定義の構文に手を入れたりも出来るということだ。 ~中略~ このような設計はマクロで制御構造までも作れるから出来るのだ。関数定義構文をマクロで定義している言語はLisp以外に私は知ら…

proto-cl-client-side-rendering に画像描画機能を追加した話

前回記事でクライアントサイドレンダリング (2D) のためのライブラリを実装してみました。 eshamster.hatenablog.com この時点では丸や四角といったプリミティブな図形の描画しかできませんでした。画像(テクスチャ)の描画機能も必要だろうなと思いつつ面…

クライアントサイドレンダリング (2D版) を Common Lisp で実装してみる

2019年と令和元年、二重に本年最初の記事です。あけましておめでとうございます。 クラウドゲームをつくる技術 ―マルチプレイゲーム開発の新戦力 (中嶋謙互) (以下、「クラウドゲーム技術」)で提唱されている「クライアントサイドレンダリング」が面白そう…

LISP: '$e eeeeeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee E

ひたすら「e」が並んでいるだけのリポジトリが話題になってました。 github.com Lispはどうかと見てみると、シンプルに無限ループで面白いというのが初見の感想でした。 e.lisp (loop (print "e")) しかし、ここでC言語の実装を見てみると何やら面白いことを…

小ネタ: define-method-combinationで遊ぶ

Lisp メソッドコンビネーション Advent Calendar 2018の4日目の記事です。 枠が空きそうな雰囲気だったので、前日の define-method-combination 解説記事を書いていて思い付いた小ネタを供養しておきます。 Blackhole: 呼ぶと消える Escher: 親の親は自分 In…

[Common Lisp] Obsoletedなエイリアスを定義するマクロ

小さなマクロ1個の小ネタ(+おまけ)です。 ライブラリを書き、ある程度使ったあたりで関数名などの命名のまずさに気付くこともあると思います。かといって、いくつかのプロジェクトで使い始めているので、今さら名前を変更するのも面倒臭い…。そういったと…

[Common Lisp] ros templateの紹介

cl-web-2d-game *1 のようなWebアプリ向けのライブラリなどを作っていると、使うまでに色々とサーバ側の設定コードが必要で、中々気軽にプロジェクトを起こせなかったりします(単にインタフェースが悪いのではという議論は置いておきます)。そうした課題の…

Common Lispでホットローディングを試しに作る (2) 実装について

前回記事ではCommon Lisp上で実現したホットローディングのプロトタイプのデモや使い方について見ました。 eshamster.hatenablog.com 今回はその実装についてです。といってもベースは実に単純なもので、ParenscriptによってCommon LispコードをJavaScriptに…

Common Lispでホットローディングを試しに作る (1) 使い方について

前回記事「[Clojure] Figwheel + cljsjs/threeでホットローディングを試す - eshamster’s diary」ではClojureScriptでホットローディングをお試ししました。そして、おおむね次のような機構で動いていることが推測されました。 なんらかの契機でLispコードの…

Common Lisp開発環境 on Dockerの現状

目次 前書き 何がどう変わったか Dockerfile 実際に使うとき 前書き あけましておめでとうございます。昨年は5件しか投稿していませんでしたが、今年はもっと増やす所存であります。 Clojureの開発環境をDocker上に作ったので記事にしようかと思い、1年以上…

Parenscript上でシンボルのインポートやエクスポートを模倣する

前書き Lisp Advent Calendar 2017の20日目の記事です。 Common LispのサブセットコードをJavaScriptに変換するParenscriptというライブラリの上でそれらしい名前空間を導入してみた記事です。考え方や実装の整理・メモという意味合いが強いので、果たしてこ…

木構造の親子関係を考慮したソート

前置き Common Lisp(サブセット)をJavaScriptコードに変換するParenscriptを色々拡張しているps-experimentで以前パッケージもどきを追加したことがありました。 eshamster.hatenablog.com 単にuse-packageしているパッケージをたどっていって、その配下で…

[小ネタ] アルファマップを生成するRoswellスクリプト

小ネタ。アルファマップを生成するRoswellスクリプトを作成したメモです。 Three.jsのように、透過画像を表示するためには(画像自体のアルファ値は無視して)アルファマップと呼ばれる、透過具合をグレースケールで表した画像(黒が完全透過で白が完全不透…

Alpineベースの(多少)軽いCommon Lisp実行用コンテナ

前書き 以前「Common Lisp開発環境 on Docker - eshamster’s diary」で紹介した開発用環境とは別に、Common Lispを実行するためだけの環境を作ってみました*1。が、手元でdocker imagesを見ると800MB、Docker Hubで見ても212MBと巨大でした。これをベースに…

リーダーマクロで非公開シンボルの参照を簡略化する @ テスト

「#:g1: リーダーマクロでシンボルの略記をする」を読んでいて、こういうリーダーマクロの使い方することあるなと思ったので投稿。大した用途ではないですが…。 こんなことはないでしょうか。 インタフェースとしては不要なので公開はしたくない補助関数があ…

Common LispでSlack botを作る

チャットbotなるものにも(今さら)手を出してみようと、Slack用のサンプルbotをCommon Lispで書いてみました。 github.com 使い方 一応使い方です。 上記プロジェクトをquicklispからロード可能な場所にclone settings.json.inを参考にsettings.json(下記…

Common Lisp開発環境 on Docker

Docker上でCommon Lisp開発環境(by Emacs+SLIME)を起こしてみました。何が入っているか分からない開発環境だとどうしてもアップデートが億劫になるので、その辺をきっちりコード化したかったというのが動機です。 どちらかと言うとAnsibleやChefのように直…

[Common Lisp] システム内のパッケージ間の関係をグラフ化

システム内に存在するパッケージ間の参照関係をgraphvizでグラフ化するRoswellスクリプトmake-package-tree.rosを書いてみました。リファクタリングに使える…かもしれません。 github.com 前説 これを作ったきっかけの話です。 Common Lispを始めた頃に、と…