あたらしい言葉を、辞書に載せる
「ゆでる」と言えるのは、なぜか
料理の本は「卵を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行が読める名前になっていれば、それが正解です。
このレッスンで分かったこと
なまえ とは { … }は、あたらしい語を辞書に載せる書き方。載せた語はなまえの一語(またはなまえ を かく)で使える- 定義しただけでは何も起きない。使って、はじめて手順が動く
- 定義した語は、別の語の定義の中で使える。語彙は階層になって育つ
- 定義は一度、使用は何度でも。よい名前を選ぶことは、よい造語
「手順のまとまりに名前をつけて、一語で呼ぶ」——この道具は、世のプログラミング言語では「関数」と呼ばれています。あなたはもう、その入口に立っています。