Upgrade to Pro — share decks privately, control downloads, hide ads and more …

bel lispの紹介

Niyarin
July 29, 2021

bel lispの紹介

Niyarin

July 29, 2021
Tweet

More Decks by Niyarin

Other Decks in Technology

Transcript

  1. Belとは Paul Graham氏のLisp系言語 データの種類が少ない ・Symbol, Pair, Char ,Stream ・他のありがちなデータもこれらで表現 コンパクトだが、継続やマクロがちゃんとある

    ・実装はたのしめると思う レキシカルスコープ、lisp-1 公式は処理系を出していない ・ただし、コアの部分さえ実装すれば動かせる ・残りの部分はbel.belとして提供されている
  2. Belのデータ表現1 / 3 関数もリスト こんな表現 (lit clo ローカル環境 引数 本体)

    ・ closureを作る構文は、quasiquoteで書かれている ・ 例 ((lit clo nil (x) (+ x 1)) 100) → 101 ⚠ lit構文は、自身をそのまま返す
  3. Belのデータ表現3 / 3 その他 数値もリスト  0,1,2,3,4 ... → nil, (t), (t

    t), (t t t), (t t t t) … 文字列もリスト “abc” → (\a \b \c) 空リストと”真”はシンボル nil t
  4. 継続もある ・ ccc”構文”で作れる ・もちろん継続もリスト 表現の形式は実装者依存  niyarinは、 (lit cont コールスタック ローカル環境)

    ⚠ インタプリタのコールスタックを陽で持っておく ・dynamic-wind風の構文、afterもある 継続で外への脱出を検出し、その前に指定した処理を実行させ る
  5. Belで実用的なコードを書けるのか? がんばればいける ・ (coin) 関数 ランダムで t , nil を出す

    ・ (sys <string>) 関数 <string>の内容をOSに実行させる ・ (thead x) 構文 xを評価する新しいスレッドを作る ・ IO streamデータがある。ただし、バイナリしか読めない