Lisp(リスプ)は、1958年に誕生した現役で使われている中では世界で2番目に古いプログラミング言語です(一番古いのはFortran)。
「人工知能(AI)の父」と呼ばれるジョン・マッカーシー教授がAI研究のために開発したため、当初から人間の思考や言語、論理を扱うのが大得意な言語として設計されました。
プログラミングの世界で「一度は学んでおくべき」と言われ続けるLispの「ABC(基本のキ)」を、初心者向けに噛み砕いて解説します!
🅰️ 【A】All is a List(すべては「リスト」である)
Lispという名前は 「LISt Processing(リスト処理)」 から来ています。その名の通り、Lispの世界ではデータも、プログラム(命令)も、すべて「カッコ ( ) で囲まれたリスト」で表現します。
命令も計算も、ぜんぶカッコに入れる
普通のプログラミング言語なら 1 + 2 と書きますが、Lispではこう書きます。
(+ 1 2)
これは、+ という「命令(関数)」と、1 と 2 という「データ」を一つのリストにまとめたものです。
ルール: カッコの最初にあるものが「命令」で、その後に続くものが「データ(引数)」になります。
どんなに複雑な計算や処理も、この「カッコの入れ子構造」だけで表現します。
🅱️ 【B】Blurs the line between Code and Data(コードとデータの境界がない)
これがLispの最大の魔法であり、他の言語(PythonやC言語など)と決定的に違うところです。これを「同型性(ホモアイコン性)」と呼びます。
普通の言語では、「プログラムのコード」と「処理されるデータ」は全くの別物です。しかし、Lispではどちらも全く同じ「カッコのリスト」です。
「データ」として扱うときはアポストロフィ ' をつける
Lispに (+ 1 2) をそのまま渡すと、コンピュータは「計算しろ!」と解釈して 3 を返します。
しかし、頭に '(クォート)をつけると、計算せずにそのままリスト(データ)として扱ってくれます。
(+ 1 2)= 計算して3になる(コード)'(+ 1 2)=(+ 1 2)という形そのものをデータとして保持する(データ)
これの何が凄いの?
「プログラムの形をしたデータ」を簡単に作れるということは、「プログラムが、自分自身のプログラムを書き換える」ことや、「AIが新しいプログラムを自動生成して実行する」ことが、信じられないほど簡単にできるのです。
🅲 【C】Common Lisp と Dialects(方言たち)
「Lisp」というのは、実は一つの特定の言語の名前ではなく、「カッコをたくさん使う言語の総称(ファミリー)」です。英語にアメリカ英語やイギリス英語があるように、Lispにもいくつかの「方言(派生言語)」があります。
現在、初心者がLispを学ぶ上で知っておくべき主な方言は以下の3つです。
💡 Lispの簡単なコード例を見てみよう!
言葉の定義だけではイメージしづらいので、少しだけ具体的なコードを見てみましょう。
1. 条件分岐(もし〜なら)
「もし が 10 より大きければ 'Big'、そうでなければ 'Small'」というプログラムです。やはり全体が大きなカッコで囲まれています。
(if (> x 10)
'Big
'Small)
2. 関数(自作の命令)を作る
「2つの数 a と b を足し算する add-two という名前の命令」を自分で作る時はこう書きます。
(defun add-two (a b)
(+ a b))
;; 使うときはこう:
(add-two 5 10) ; => 15 が返ってくる
🎯 まとめ:なぜ今Lispを学ぶのか?
現代のAI開発の主流はPythonですが、Lispを学ぶと「コンピュータがプログラムをどう認識し、どう実行しているのか」という根本的な仕組みが驚くほどクリアに見えるようになります。
よくプログラマの間では、「Lispを学ぶと、たとえその後Lispを実務で使わなかったとしても、プログラミングの視野が広がって頭が良くなる(良いコードが書けるようになる)」と言われています。
まずは「すべてをカッコ (命令 データ1 データ2) で包むルールなんだな」というAのステップから、パズルのように楽しんでみるのがおすすめです!
【コピー用テキスト】
Lispの基本構造:
(関数名 引数1 引数2 ...)
例: (+ 1 2) ; 1 + 2 を計算する
例: (print "Hello") ; 画面にHelloと表示する
※頭に「'」をつけると、計算せずにデータとして扱う: '(+ 1 2)
(ご要望のコピー用アイコンの代わりに、いつでも簡単にコピー・メモができるテキストボックス形式にしています。学習の備忘録にどうぞ!)
0 件のコメント:
コメントを投稿