🚀

Lisp文化FAQ

2024/03/09に公開

夢の中でもマクロを書く程に取り組まないとマクロをマスターできませんか

Lispのマクロは通常IDE上で対話的に書くため、IDEがない状態ではマクロが書けないというレベルでも支障ありません。

Lispはいつから純粋な関数型言語ではなくなったのですか?

Lispは主にAdvice TakerのようなAIプログラムを実現する言語として計画されましたが、純粋な数学的概念のみを基礎としたプログラミング言語を実現したいというような言及はありません。
具体的な例としては、最初のLISP Iの頃から、繰り返し構文が用意されています。
progというループ構文と、その内側で使えるsetという代入構文は、ALGOLやFortranあたりから拝借したようです。

しかし、Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part Iにはprogは登場しないのでは?

この論文は主に理論的背景を説明しているものだと思いますが、program featureというのがprogです。

  1. A “program feature” allows programs containing assignment and go to
    statements in the style of ALGOL.

また、プログラミング言語としてのLispの具体的な機能と実装についての議論ということであれば、LISP 1.5 Programmer's Manualあたりを参考にすることが多そうです。

Lispは括弧が大量にあるのが気になります。慣れると見えなくなりますか。

Lispの括弧は鍋などの取っ手のようなもので、Lispプログラマは、括弧を視覚的に扱うというよりは、エディタを介して取っ手を触覚的に扱っています。
このことを指して括弧が見えなくなると表現することも可能だと思いますが、実際には取っ手が無くなることはありません。
ハシゴに慣れたからといってハシゴのステップが見えなるようなことはないでしょうし、ステップの間隔が大きく異なれば、視覚的に把握できていても扱いは困難でしょう。

ただし、視覚的に括弧が気になってプログラミングに集中できないという人は一定数存在することが歴史的にLispコミュニティ内でも知られています。
鍋の取っ手の視覚的な形状が気になって調理に集中できない人も一定数存在するのかもしれません。

Lispプログラマはカッコつけてるんですか?

この駄洒落が粋だなと感じたのは、Lispのプログラミングイベントでの乾杯の音頭で「カッコつけていきましょう」と使われたのを耳にしたときくらいですね。
山形県を訪れた際に「山があった!」と連呼する人の気持ちが分からないわけではありません。

人生でよりよいプログラマーとなる手助けとするため、使うことのないLispを学ぶべきですか?

Lispプログラミングの最大の特徴はデータでコードを書くことですが、あなたのプログラマ人生において、データでコードを書くことがなかったり、プログラミング言語自体をプログラミングの対象にしないのであれば、特に何かの手助けとなることもないでしょう。

Lispで日常的にデータでコードを書く経験が、コード生成などで、メリット/デメリットの勘所を押えたメタプログラミングをする手助けにはなることはあるかもしれません。
この点においては、Lispに限らずPrologなどの言語もあります。

また、Lisp方言内でも、データでコードを書くものから、テキストでコードを書くことに近いものまで濃淡があります。
文法がLispでも、プログラミング言語自身のデータ構造でコードを記述してはいない場合もあり、この場合Lisp方言と見做されることはほぼありません。

Lispを学ぶにはLispのインタプリタを自作するのが近道ですか?

Lispのインタプリタを自作しても、Lispの特徴である、データでコードを書いてプログラミングすることが理解できるわけではないので、近道ではなさそうです。

Lispは関数型言語、もしくはオブジェクト指向言語ですか?

関数型やオブジェクト指向プログラミングが何を指すのかは時代によってまちまちですが、データでコードを書くというLispプログラミングのパラダイムが、他のパラダイムと組み合せることは不可能ということもない筈です。
なお、実際にそのようなLisp系言語やLisp拡張は存在しています。

Discussion