あたらしい言葉を、辞書に載せる

よみもの+手を動かす時間:およそ25分

「ゆでる」と言えるのは、なぜか

料理の本は「卵を10分ゆでる」と書きます。「鍋に水を入れ、火にかけ、沸いたら卵を沈め、10分待つ」とは、毎回書きません。「ゆでる」という語が辞書に載っているから、その一語で手順のすべてが通じます。

日本語を使うあなたは、こうして「手順のまとまりに名前がついた語」を、毎日たくさん使っています。今日やることは、それと同じことを、にわ語の辞書に対してやることです。

まだ、通じない言葉

まず、辞書にない言葉を使ってみます。実行してみてください。

にわ語
はなびら

ここに絵があらわれます

Ctrl+Enter でも実行できます

「『はなびら』ということばを、まだ知りません」。レッスン1で出会った、あの誠実な読み手の返事です。

ただし今回は、返事の続きに注目してください。「はなびら とは { … } で定義すると、使えるようになります」——コンピュータは、教え方まで教えてくれています

辞書に載せる:「とは」

では、教えましょう。書き方は、国語辞典の見出しと同じです。「はなびら とは、こういうものである」。

にわ語
はなびら とは {
  20 すすむ
  まる を かく
  みぎ へ 180 まわる
  20 すすむ
  みぎ へ 180 まわる
}

おおきさ を 18 にする
はなびら

ここに絵があらわれます

Ctrl+Enter でも実行できます

通じました。最後の行の はなびら の一語で、5行ぶんの手順——進んで、描いて、元の場所に戻る——が実行されています。はなびら を かく と書いても同じ意味になります。

ここで、先に難所を言っておきます。定義しただけでは、何も起きません。 ためしに最後の行の はなびら を消して実行すると、画面は空のままです。辞書に「ゆでる」が載っていても、それだけでは台所で何も起きないのと同じで、定義(載せる)と使用(その語で頼む)は別の行為です。

たとえの限界もひとつ。ほんものの辞書は語の意味を人間向けに説明するだけですが、にわ語の定義は手順そのものです。載せた語は、読むものではなく、実行できるものになります。

語が、語を使う

定義した語は、にわ語の語彙に仲間入りします。つまり——別の語の定義の中でも使えます

にわ語
はなびら とは {
  20 すすむ
  まる を かく
  みぎ へ 180 まわる
  20 すすむ
  みぎ へ 180 まわる
}

はな とは {
  6 かい くりかえす {
    はなびら
    みぎ へ 60 まわる
  }
}

いろ を もも にする
おおきさ を 18 にする
はな

ここに絵があらわれます

Ctrl+Enter でも実行できます

はな の定義を声に出して読んでみてください。「はな とは、はなびらを、60度まわしながら6回くりかえすこと」。ほとんど日本語の定義文です。

はなびら の定義の終わりで、向きと場所を元に戻していたことが、ここで効いています。行って、描いて、戻ってくる語は、安心してくりかえしの中に置けます。あとで組み合わせる語ほど、使ったあとを片づけておく——これは設計の習慣です。

よりみち:ライブラリ=他人が編んだ辞書

プロのプログラミングは、ゼロから書くことより「他人が定義した語彙を借りてくる」ことでできています。Python の import 文は、誰かが編んだ辞書(ライブラリと呼びます)を丸ごと机に置く行為です。言語に最初から付いてくる標準ライブラリは、いわば国語辞典。プログラミングの文化は、半分くらい、辞書の貸し借りの文化です。

語彙が、育っていく

もう一段、続けます。はな を使う くきくき を使う はなたば

にわ語
はなびら とは {
  20 すすむ
  まる を かく
  みぎ へ 180 まわる
  20 すすむ
  みぎ へ 180 まわる
}

はな とは {
  6 かい くりかえす {
    はなびら
    みぎ へ 60 まわる
  }
}

くき とは {
  いろ を みどり にする
  80 すすむ
  いろ を もも にする
  はな
  いろ を みどり にする
  みぎ へ 180 まわる
  80 すすむ
  みぎ へ 180 まわる
}

はなたば とは {
  ひだり へ 40 まわる
  くき
  みぎ へ 40 まわる
  くき
  みぎ へ 40 まわる
  くき
}

おおきさ を 18 にする
はなたば

ここに絵があらわれます

Ctrl+Enter でも実行できます

プログラムは長くなりましたが、構造を見てください。はなびら → はな → くき → はなたば。小さな語が、より大きな語の部品になっています。そして最後の1行は はなたば——いちばん下の行だけ読めば、このプログラムが何をするか分かります。

はなびら の中身を直せば(たとえば まるほし に)、花束ぜんぶの花びらが変わります。定義は一度、使用は何度でも。 だから直すのも一度で済みます。レッスン2の「名前の力」と同じ理屈が、手順にも働いています。

もうひとつ。くき の中で いろ を みどり にする と書くと、定義の外にある いろ が付け替わります。だから茎は緑、花は桃色に塗り分けられました。

よい語を選ぶことは、よい造語です。はなたばていぎ3 という名前にしても絵は同じですが、最後の1行が読めなくなります。関数の名前を考える時間は、あなたの言語に載せる新語を吟味する時間だと思ってください。

「おおきい はなびら」と言いたくなったら

ここで、あなたはそろそろ不満を感じているはずです。大きい花と小さい花を混ぜたければ、いまは呼ぶ前に毎回 おおきさ を 〜 にする と書くしかありません。「おおきい はなびら」のように、語に値を添えて渡す書き方が欲しくなります。

にわ語には、それがありません。わざと、ありません。その不便は、覚えておいてください。コース2で、あなた自身が言語を作る側にまわったとき、その仕組み——「引数」という名前がついています——を、あなたの手で言語に実装します。

演習:自分の語を、2つ以上定義する

あなたの語を2つ以上定義して、それらを組み合わせて、ひとつの絵を作ってください。下のエディタには みき という語がひとつ載せてあります。続きの語彙は、あなたが編んでください。

にわ語
※ ことばを2つ以上、組み合わせてください
みき とは {
  いろ を ちゃ にする
  ふとさ を 8 にする
  60 すすむ
}

みき

ここに絵があらわれます

Ctrl+Enter でも実行できます

ヒント1(考え方)

描きたいものを、先に日本語で言ってみます。「木は、幹の上に葉っぱ」と言えたら、定義すべき語はもう見えています:みき、はっぱ、そしてそれを束ねる語。日本語にした時点で、設計は半分終わっています。

ヒント2(かたち)

語の定義は なまえ とは { … }、中では色や太さの付け替え、すすむ、かく、定義済みの語、なんでも使えます。組み合わせる語(き など)の定義の中に、部品の語(みき、はっぱ)を順に並べます。

こたえ(の一例)

みき のあとに はっぱ とは { いろ を みどり にする / おおきさ を 50 にする / まる を かく }いっぽんのき とは { みき / はっぱ } を定義して、最後の行を いっぽんのき にする——幹の上に丸い葉が乗った、一本の木になります(/ は改行のつもりで読んでください)。

束ねる語を にしたかった人へ。試すと「すでに使われています」と返ってきます。にわ語の辞書には (黄色)という先客がいるからで、ほんものの辞書と同じく、見出し語はひとつしか載せられません。

あなたの語彙がこれと違っていても、動いて、最後の1行が読める名前になっていれば、それが正解です。

このレッスンで分かったこと

  • なまえ とは { … } は、あたらしい語を辞書に載せる書き方。載せた語は なまえ の一語(または なまえ を かく)で使える
  • 定義しただけでは何も起きない。使って、はじめて手順が動く
  • 定義した語は、別の語の定義の中で使える。語彙は階層になって育つ
  • 定義は一度、使用は何度でも。よい名前を選ぶことは、よい造語

「手順のまとまりに名前をつけて、一語で呼ぶ」——この道具は、世のプログラミング言語では「関数」と呼ばれています。あなたはもう、その入口に立っています。