標高+1m

Don't be rational.

Lisp

WSL2でsketchを使う手順

Windows11のWSL2でsketchを動かすまでの手順をメモ Sketch is a Common Lisp environment for the creation of electronic art, visual design, game prototyping, game making, computer graphics, exploration of human-computer interaction and more. It…

プチ発明 Lispマクロ with-many

Lispマクロの話です。Lispという言語は、プログラム自体がリストで記述されているので、そのリストを操作することで構文を自由*1に作ることができるのです。 LispでCGを描きたいぞと思って、これまで色々と試してきたが、どうも人の作った環境は複雑で、エラ…

biwascheme call/cc 非同期処理と大域脱出

引き続きbiwaschemeで呪文を唱えております。 ;;treasure hunt (let ((data (<o> 'data (fetch-json "treasure-map.json")))) (begin (listen-click "button") (console-log (<o> 'treasure (fetch-json (<o> 'treasure-url data)))))) #0: 宝探し call/ccで非同期処</o></o></o>…

call/ccの合成の解

以前の記事 ( call/ccの合成 - 標高+1m )で、やりたかったのはこういうことでした。 たまに便利なことがあると思う。 (define (compose-c/cc . fs) (letrec ((vals (list->vector (map (^ (f i) (f (lambda (res) (vector-set! vals i res) (when cont (cont…

LispマシンMirai

この記事は lisp Advent Calendar 2018 の25日目に書かれました。 メリークリスマス! 一月ほど前に、ワイヤードを漂っていたMiraiのバイナリをうっかり手に入れてしまったので、 環境を作って少し遊んでみました。*1 CG制作統合開発環境Miraiのコードベース…

関西Lispユーザー会でしゃべってきました

13日に神戸大学で開催された関西Lispユーザー会に初参加して、発表してきました。 スライドです。 docs.google.com 瀧先生のLispマシン TAKITAC 7 懇親会でも憧れの人たちと濃い話ができて面白かったです。 当日お会いした方々、運営の皆様お世話になりまし…

自然保存プロジェクト Nature Conservation Project

www.youtube.com キーボードを筆、Lispを絵の具、GPUをキャンバスにして絵を描いている。 Lately I've been painting pictures, with Lisp as brushes and GPU as canvases. Inspiration: Development: Snapshot: 次の宇宙の子孫たちのために、現象のダイナ…

カッコの少ないSchemeを作る

昨日の記事 ympbyc.hatenablog.com の内容をScheme (gauche)で実験できるようにしてみます。 今回の記事は、上から順にGaucheのリスナに貼り付けていけば、動作が確認できるようにしてあります。 準備 まず、固定長引数とそれ以降の引数を取って、余った引数…

Lispから可変長引数を引き算したらできること

Schemeから可変長引数を引き算したら -- Island Life Shiroさんが面白い記事書かれてたので、前に実際に可変長引数をなくしたLispを作って発見したことを紹介します。*1 実装者とは全く別の、遊ぶ人の視点からの記事です。 この記事では意図的にマクロを一切…

玲音はBeOSユーザーだった!? lainのLisp開発環境を発掘!

こんばんは。アマチュアLisp考古学者の山下です。先週弊社でピザを焼きながら唐突に話題に上った、lainのHandiNAVIにLispのソースコードが表示されているシーンについて検証していきます。 幻のLisp開発環境を手に入れてコネクトワイヤードしたい! まずは先…

宇宙API Part1

僕は今頭がhyperactiveになってるからとっておきの考えを書く。これは僕が暇なときにいつも考えてることで、これからも何回か書くことになると思う。 宇宙というソフトウェアのコードを、なるべく簡潔に記述するとしたらどんな風になるのか考えてみる。この…

CLOSオブジェクトのシリアライズ

これ便利。 (define-class <serializable> () ()) (define-method write-object [(x <serializable>) out] (let* ([class (class-of x)] [serializable-slots (filter (^s (get-keyword :init-keyword (cdr s) #f)) (class-slots class))] [slot-names (map car serializable-slots)] [in</serializable></serializable>…

Carrotに別名を導入した

昨日の記事で、 例えば、真偽値はa -> a -> aな関数にして、型はBoolにしたいけど、 そうしちゃうと=cを使っても分岐の左右が同じ型かのチェックができなくなっちゃう ということを書いたんだけど、とりあえずこのBoolについての問題はシノニムを導入する事…

Carrotの変な型システムについて

年末年始は結局だらだらと本を読んで過ごしてて全然Carrotを触ってなかった。昨日今日と頑張ったらとりあえず動く型チェッカができて、わりかし欲しいものに近付いた気がする。 今はCarrotを、クロージャといくつかの基本型しかない、型なしλ計算計算機みた…

化ける!S式

(この記事はLisp Advent Calendar 13日目のためのエントリです。) こんにちは!冬休みに日本に帰るときに経由しているロサンゼルスの空港で書いています。アメリカ時間ではまだ13日ということで遅刻していないと言い張らせてください。 Lispアドベントカレ…

撫子からにんじんへ

トイ言語Nadekoの名前をCarrotに変えた。Schemeの一番最初のコンパイラの名前がRabbitだったらしいので割とお洒落な気がする。うさぎはにんじんが好きっていうのだけじゃなくて、 Rabbit Carrot で同じ文字数な上に文字がダブる位置まで一緒だから超お洒落だ…

Lispから他言語へのトランスレータでLispのマクロシステムをそのまま使う方法

CPS変換してsetTimeoutjavascriptでスタック食わずにガンガン再帰したくて今日ちろっと試していたことがあるんだけど、その過程で見つけたことのメモ。1. トランスレータはターゲット言語で実装するより翻訳元言語で実装する方が1000倍楽. パーサは(read)で…

JavaScriptでCLOSライクな多重継承と総称関数

2年ぶりくらいにCLOS(GaucheのやつなのでせいかくにはTklos)をかじったらやっと意味が分かりました。 多重ディスパッチかっこよすぎる。おもむろにgithubを探したらJS-CLOSっていうロシアの人が1年前に放棄した動かないJSプロジェクトがあったので、フォーク…

Smalltalk-72 at Smalltalk勉強会(兼忘年会)

Ustream.tv: ユーザー CincomJapan: Smalltalk-users.jp@CINCOM, Smalltalk-users.jp@CINCOM. コンピュータ眠いので一応これだけ。