HN🔥 119
💬 24

Lispの全貌を解明:Common Lisp、Racket、Clojure、Emacs Lispを徹底比較!

veqq
約7時間前

ディスカッション (11件)

0
veqqOP🔥 119
約7時間前

Lispというプログラミング言語の系譜は非常に奥深く、多種多様な方言が存在します。本稿では、モダンな開発から歴史あるシステムまで幅広く使われている「Common Lisp」「Racket」「Clojure」「Emacs Lisp」の4つの主要なLisp系言語に焦点を当て、それぞれの特徴や使い分けについて解説します。どのLispがあなたのプロジェクトに最適なのか、その全貌を探っていきましょう。

1
eamonnsullivan
約7時間前

Clojure 1.6にEmacs 24.5か…。どちらもかなり古いバージョンだね。

3
arikrahman
約6時間前

この分野でJankがどうなっているのかも見てみたいね。

4
sinsudo
約6時間前

このページの目的はCommon Lisp、Racket、Clojure、Emacs Lispの構文比較だっていうのは分かってるんだけど、もっと慣用的な書き方がある例もいくつかあると思う。例えば最初の例:

  (defun add (a &rest b)
    (if (null b)
        a
        (+ a (eval (cons '+ b)))))

evalは避けるべきだし、nullの代わりにendpを使うべきだね:

   (defun add (a &rest b)
        (if (endp b) a
            (apply #'add (+ a (first b)) (rest b))))
5
ethagnawl
約6時間前

これはすごくいいね。

ずっとやりたいと思っているのが、クロスLispパッケージマネージャーの作成かな。面白いだろうし。実装固有のものにはclj/cljsのような動的ディスパッチを使ったり、あるいは簡単に実行・評価できるコードを優先したりする感じだと良さそう。

6
sinsudo
約5時間前

ページにはCommon Lispにドキュメント用の関数がないと書かれているけど、実際にはこれがあるよ。

  (documentation 'documentation 'function)
      "Return the documentation string of Doc-Type for X, or NIL if none 
        exists. 
        System doc-types are VARIABLE, FUNCTION, STRUCTURE, TYPE, SETF, and T.

 あと、色々なプログラミング言語での実装タスクを比較できる http://rosettacode.org もおすすめだよ。
8
FergusArgyll
約5時間前

プログラマーではないけれど、PythonとCは初心者から中級レベルの者です。今Lisp(正確にはElisp)を学習中なんだけど、詩を読んでいるような気分だよ。説明するのが難しいほど超越的な体験だね。すごく美しい概念ばかりだし、C言語ベースの言語とは全く違う流れ方をしている。

9
vindarel
約5時間前

CLについてのメモ:

  • 「コンパイラ」の行が空なのはなぜ?SBCLでスニペットやファイルを読み込むたびに(マシンコードへ)コンパイルされるんだけど。compile-fileもあるしね。

  • インタプリタ:同様に、SBCLではデフォルトですべてコードがコンパイルされていて、REPL上でもインタプリタは使われない。インタプリタを使うならこれが必要: https://github.com/lisp-tips/lisp-tips/issues/52 (https://github.com/lisp-tips/lisp-tips/issues/52)

  • コマンドラインプログラム:Racketのセルでは-e (eval)の使用例があるけど、どんなCL実装でも同じことができるよ。

  • 文字列分割の行でcl-ppcreが紹介されているから、cl-strも載せるといいかも :D (宣伝) (join, trim, concatなどがかなり簡潔に書ける)

  • ああ、日付や時刻、リストのフラット化、ハッシュテーブルのリテラルなど…もっとライブラリが必要だね。

  • ファイル操作についても: https://lispcookbook.github.io/cl-cookbook/files.html (https://lispcookbook.github.io/cl-cookbook/files.html)

  • Emacsバッファ:Lemのバッファと比較してみて 8-)

  • posix-getenv:自分ならuiop:getenvを使うかな(各実装に含まれているし)

  • uiop:command-line-arguments

  • exit:uiop:quit

  • uiop:run-program (同期) / launch-program (非同期)

  • Javaとの相互運用:LispWorksやABCLなど(あるいは他のライブラリ)で可能

個人的な意見でした