Closed9

Common Lisp を垣間見る (→ 見なかった)

toyboot4etoyboot4e

Lisp をちゃんと書いたことがない

Common Lisp を一瞬だけ見にいきます。キャッチできる情報も増えて悪くないはず!

toyboot4etoyboot4e

環境構築 [失敗]

処理系

最新の sbcl は 2.2.3 ですが、 AtCoder の sbcl は 2.0.3 です。

AtCoder の sbcl はライブラリを一切いれておらず、 2023 年の更新も無いようです。スタック周りの修正ぐらい入れたら良かったのに……?

そのため roswellsbcl 2.0.3 をグローバルインストールします。今は動けばよかろうなのだ!

$ ros setup
$ ros install sbcl/2.0.3

NixOS でインストールに失敗。検討中です……。 ハックでなんとかしている人 はいますね。達人なら Flakes でなんとかするのかなぁ……

エディタサポート

Emacs では slime を入れると REPL でホットリロードができていい感じらしいです。

(leaf slime
    :custom (inferior-lisp-program . "sbcl"))

言語サーバは無い、と思いきや Swank (Slime のサーバ部分) と Slime (クライアント部分) の関係が言語サーバとクライアントの関係なのだとか。何をどこまでやってくれるのか見てみたいですね。

パッケージ管理

他人の書いたパッケージを利用する場合,1.インストールし,2.プログラムをロードする必要があります.

インストールをしてくれるのがQuicklisp,依存関係を解決しロードしてくれるのがASDFと理解して良いと思います.

http://diary.wshito.com/comp/lisp/lisp-pm/

ここは一旦飛ばします。

toyboot4etoyboot4e

環境構築 [妥協]

NixOS にて:

  • sbcl
    sbcl_2_0_8 を sbcl 2.0.3 の替わりに使います。
  • slime or sly
    こちらは ros install で素直に入ります? 一体どの slime が動いているのか……
  • スクリプト実行
    sbcl --script ./Main.cl で実行します。ビルドしても全然良いですが。

Emacs に evil-collection-slime-setupを入れて、一応動いてそうですね。パッケージは飛ばして Common Lisp を見てみよう!

toyboot4etoyboot4e

Practical Common Lisp

エアプで読んでみます。

https://gigamonkeys.com/book/

1. Why Lisp?

  • ポスト Rust の時代に Common Lisp を使う理由は……
  • 構文に興味があります。自作言語の参考にしたいのですよね。

2. Lather, Rinse, Repeat: A Tour of the REPL

  • いきなり Emacs (Lispbox) 前提で敷居が高いですね。 Evil ユーザで良かった。
  • 式指向な感じが、当時にしては異常にセンスが良かったんだろうと重います。
  • SLIME がコード編集を激烈にサポートしてくれるみたいです。 NixOS でも簡単に動いてくれ……!

TODO

toyboot4etoyboot4e

AHC

無謀過ぎますが、これで練習しようと思います。貪欲解で 1 点でも取れたら OK ということで!

リンク

https://atcoder.jp/contests/ahc020

  • 開催期間は 15:00 ~ 19:00 (4 時間)
  • 解答の提出間隔は 30 分
  • コンテスト中は一切発信しないほうが無難

懸念

まず木が無いのがマズいです。いかにコンテスト中に他人のコードを吸収できるかの戦いとなります。

雑念

しかし Common Lisp の実行コマンドは sbcl --script で本当に良いのか……? 実はインタープリタ実行になっていたら絶望です。

toyboot4etoyboot4e

Common Lisp 何も分からない

AHC に備えて IO ぐらい調べるつもりが

Address boundary error

そんなことある??

問題のコード
(defun main ()
  (print "WIP"))
(main)

nixpkgs の sbcl 2.0.8 が壊れていた気がします。 2.0.9 に上げたら直りました。

このスクラップは4ヶ月前にクローズされました