もっと楽しむ! プログラミング言語 「豆」談義

第3回年の功より、カメのロゴ「LOGO」(前編)

LOGOをご存じですか?

この連載も今回で3回目となりました。今回と次回(4回目)で取り上げるプログラミング言語は「LOGO(ロゴ⁠⁠」です。前回のPrologや前々回のLISPは、情報処理技術者試験にも出てきますし、コンピュータサイエンスの勉強をした経験があれば授業の中で扱うこともあるでしょうから、⁠詳しくは知らないけど名前だけは知っているよ」という人がたくさんいると思います。しかし、LOGOはどうでしょう。今まで一度も耳にしたことがなかったという人も多いのではないでしょうか。LOGOを触った経験がある人はさらに少数だと思います。昔から趣味などでパソコンを触っていた人は、⁠ああ、あの一瞬で消えた言語だね。」と思ったかもしれません。日本では1980年代にLOGOがブームになりそうな兆候がありましたが、LOGOの狙いや目的が正確に伝えられないまま名前だけが先行してしまったため、理解されることなく一瞬で消えてしまいました。

このように、LOGOはあまり知られていないプログラミング言語です。しかし一度LOGOの心に触れてみると、実は未来への夢と希望、そして子供への愛情がぎっしりと詰まったプログラミング言語なのだということに気付かされます。本稿では、そんなLOGOが秘めている魅力を少し覗いてみることにします。

MIT生まれの思想を実現したLOGO

LOGOとは何かを知る上で欠かすことのできないのが、生みの親(のうちの一人)であるシーモア・パパート(Seymour Papert)氏の存在です。彼は現在、米国のマサチューセッツ工科大学(MIT)の名誉教授ですので、以降はパパート教授と呼ぶことにします。パパート教授は数学者であると共に発達心理学者でもあり、特に教育コンピューティングや、マーヴィン・ミンスキーと共同研究した人工知能学の分野で大きな功績を残している人物です。1960年代にジュネーブ大学でジャン・ピアジェという有名な心理学者に師事し、多くの影響を受けた彼は、⁠コンストラクショニズム(Constructionism⁠⁠」という新しい教育理論を提唱しました。コンストラクショニズムとは、⁠学習者は、周りの環境に働きかけることで何かを作り出し、それを認識することによって、新たな理解や知識が作り出される」という考え方です。つまり、知識構造は教師などの第三者から教わるものではなく、学習者自身の手によって作り出されるということです。これは、現在も広く行われている子供への詰め込み型教育に対するアンチテーゼとも言えます。

LOGOとLEGO

この理念に基づき、パパート教授が1967年にBBN(Bolt, Beranek and Newman)チームと共に開発した数学教育用プログラミング言語がLOGOです。パパート教授の思想をもう少し詳しく知りたいのであれば、⁠マインドストーム――子供、コンピューター、そして強力なアイデア』という書籍を読んでみましょう。彼の教育に対する考え方やLOGOについての思いが述べられています。ちなみに、マインドストームと言えば、大手玩具メーカーのLEGO社が販売している「LEGO MINDSTORMS」のことを思い浮かべるかもしれませんが、この名前はパパート教授のマインドストームが由来です。LEGO MINDSTORMSとは、センサやモータを取り付けた小型のコンピュータをレゴブロックに組み込み、それをプログラムから制御することでレゴブロックを動くおもちゃにするというものです。LEGO MINDSTORMSは、第一世代の「RCX」から、第二世代の「NXT」へと着実に進歩を続けていますが、元々はLOGOを使った「LEGO TC logo(レゴロゴ⁠⁠」というプロジェクトがありました。現在販売されているLEGO MINDSTORMSは、このLEGO TC logoをMITの研究の中で改良し洗練させたものです。

LOGOとLISP

LOGOの目的は、数学を一方的に受身で教えられるような形式的なものではなく、具体的なものとして思考できるようにすることです。学習者である子供は、画面に表示されるアーネスティン(Ernestine)という名前のメスのカメと会話しながら学んでいきます。有名な童話「ウサギとカメ」に出てくるカメの、ひひひ孫の遠い遠い親戚のカメである彼女は、子供が伝えたことが理解できたら、それを実行してくれます。うまくいったかどうかは画面を見ればわかります。間違っていても気にしない、すぐにやり直すことができます。そうやって子供は彼女とだんだん仲良くなりながら、知らず知らずのうちに数学を学んでいます。アーネスティンと会話するための言語は英語でも日本語でもなく、LOGOという数学語です。

LOGOは、LISPをベースにした簡単な基本構文と、変数やプロシージャ程度の非常にシンプルな言語仕様です。LOGOの処理系はいくつもありますが、Windows環境で、無料で使える有名なものとしては「MSWLogo」があります。また、もう開発を終了してしまいましたが、兼宗進氏が公開されている「ロゴ坊」という日本版の処理系もあります。MSWLogoではアーネスティンがカメの絵ではなく単なる三角形なので少し寂しいですが、ロゴ坊ではちゃんとカメの絵になっています。LOGOでオブジェクトが扱えるよう拡張されたObjectLOGOという製品もありますが、LOGO自体はオブジェクト指向言語ではありません。しかし、言語仕様としてオブジェクトを定義する方法がないだけで、カメというオブジェクトに対してメッセージパッシングする(送る)という意味では、オブジェクト指向の理念に通じる点があります。それもそのはずで、オブジェクト指向やSmalltalkで有名なアラン・ケイは、ピアジェやパパート教授から多くの影響を受けているからです。LOGOとSqueakは、言語仕様こそ違いますが、根底に流れる背景や目指すところは似ています。

基本的なLOGOの命令を表1に紹介します。

表1 LOGOの命令
LOGOでの命令()内は省略表記の命令ロゴ坊での日本語拡張
前進/後退forward (fd) / back (bk)まえへ/うしろへカメの向いている方向へ100進む fd 100
右回転/左回転right ⁠rt⁠⁠/left (lt)みぎへ/ひだりへカメを右へ90度回転させる rt 90

なお、アーネスティンのお腹にはペンがついているので、forwardやbackで彼女の通った道には軌跡が描かれます。試しにロゴ坊*1で正方形を描いてみましょう。

fd 100
rt 90
fd 100
rt 90
fd 100
rt 90
fd 100
rt 90
図1 実行結果
図1 実行結果

次回はもう少し詳しくLOGOを触ってみることにします。お楽しみに。

*1
ロゴ坊。後編で少し説明します。

おすすめ記事

記事・ニュース一覧