マイクロワールド      LOGO言語プログラミング教育入門
 「将来は英語を生かした仕事がしたい。」と話す生徒は、いますが、「将来は、英語で仕事をしたい。」とは言わないですね。プログラミング言語も言語であって、教育の場では、「なぜ、プログラミング言語を生かしたいのか」と考えることが大事です。数学の先生が「・・・では、数学語で考えてみると・・・」という使い方をすることがありますが、身の回りの現象をLOGO言語でプログラミングしながら考えてみると、論理的に考える力が育ちます。「算数だけやって計算ができれば、数学はいらない」と言う先生は、いないでしょう。プログラミングも単純に並べてみるような考え方から、歴史を積み重ねて構築されてきた知見があり、科学技術が集合されています。
 LOGO言語は、教育用プログラミング言語として生まれ、数十年が経過しました。教育現場で、使いやすさだけでなく、教育活動で必要とされる機能が実践を通じて構築されてLOGO言語の入力・編集・実行するマイクロワールド(LOGO言語で学習活動する場をマイクロワールドと呼んだ)というソフトとして完成しました。マイクロワールド(LOGO言語)は、使いやすいだけでなく、高度な教育活動も行えるので、幼稚園から、小学校、中学校、大学まで、利用されています。「LOGO言語プログラミング教育入門」が、LOGO言語をプログラミング教育の視点から、教育活動を考えるときの参考になればと思っています。

放送室のハードウェアとプログラム 放送室の「プログラム」と「アプリのプログラム」
プログラムの動作の仕組み アプリが動くまで
何でプログラミングするのか 学校で使われてきたプログラミング言語
模型のハードウェアとプログラム 身近なおもちゃのプログラミング
学校の日課をプログラミング バッチ処理と呼ばれる順番だけを書くプログラミング
メインルーチンとサブルーチン 順番だけの記述から構造的記述への進化
ボタンのイベント オブジェクトとイベントという、現在のプログラミングへ
カメをクリックのイベント オブジェクトへのプログラミング
マルチタスク 複数の処理が独立して動く処理
命令語の書式 プログラミング言語の命令の書式
命令語を試す 命令語の働きを試す方法
命令語は関数 命令語の構造は、数学での関数と同じ
命令語を作る プログラミングとは、自分で新しい命令語をつくること
不完全な関数 プログラミングでは、不完全な関数の形の命令語が多い
完全な関数を作る 完全な関数の形の命令語を作る
プログラムの書式 命令語をエレガントに記述する
再帰処理 無限の処理を作る
グローバル変数とローカル変数 参照できる範囲が異なる変数
リスト処理 ワードの集合はリスト
カレントなカメ 主役のカメ
カメのいろいろなイベント処理 カメというオブジェクトのイベント処理







 ▲戻る        放送室のハードウェアとプログラム

放送室でチャイムを鳴らす装置 チャイムが聞こえてくると近くに学校があるなと気づきます。どこでチャイムを鳴らしているのでしょう。放送室に入ると、チャイムを鳴らすスイッチらしきものはありません。チャイムコントローラーと呼ばれる機械で時間になるとチャイムを鳴らしています。
調整卓の回りにはプログラムがいっぱい  「何時何分にチャイムを鳴らす」ということをチャイムコントローラーに記憶させます。この時間とスイッチの関係は、プログラムと呼ばれるソフトウェアになります。昔は、このソフトウェアは、ドラムにピンを刺して設定する方法やカードに穴を開けたり、黒い■を書くようにして設定する機械もありましたが、今時の学校は、曜日によってチャイムの時刻が違ったりするので、昔のような機械を使っている学校はなくなりました。今は、チャイムコントローラーにプログラムとして、チャイムのスイッチを入れる時刻、チャイムを鳴らす時間を記録していきます。さらに、音楽を流したりできるように、いくつもの機械とつながっていて調整卓を構成しています。

調整卓のまわりを見ると、いつ何をどのように放送するかのプログラムや操作手順が貼ってあります。放送委員会の生徒は、これらのプログラムと操作手順を見て、朝の放送、昼の放送、帰りの放送を行っています。
ここまでは、コンピュータは必要でなく、手順を考えることがプログラミング教育だと言うなら、プログラミング教育は、コンピュータが無くてもできることになりそうです。
お昼の放送で曲を流すアプリ 実際には、昼の音楽は、コンピュータを使ってマイクロワールド(LOGO言語)で生徒と昼の番組表を作っています。
作品のページを印刷してお昼の番組表として、掲示しています。
放送室では、コンピュータと調整卓を接続し、マイクロワールド(LOGO言語)で作った番組表のリンクをクリックして曲を流しています。放送というプログラムの一部をコンピュータのプログラムにしてアプリ(アプリケーションソフト)にしていくことがマイクルワールド(LOGO言語)で日常的に行われているのです。
 作品例「お昼の音楽」→1月お昼の音楽.mwx


曲名を選択して、スピーカーの形をクリックすると曲が流れます。
 ▲戻る  

 ▲戻る       プログラムの動作の仕組み

   マイクロワールドのLOGO言語で作ったアプリ「お昼の校内放送」が動くまでの仕組みを概略で考えてみましょう。
アプリをクリックすると・・・ コンピュータの本体は、小さなスイッチの集まりのようなものです、たくさんのスイッチのどれかをONにしたり、OFFにしていて、まるで職人のようです。そこで、コンピュータの本体を二数数の言葉しか聞かない職人の家と考えてみましょう。家の名前は、インテルさんとしておきましょう。電源を入れると、インテルさんの家の職人が起きます。続いて、ローダーという仕組みで、大きな商社「ウィンドウ」が開店します。商社「ウィンドウ」は、個人客との商売はしないので、画面に並べられた営業会社「マイクロワールド」からの発注を受けます。営業会社「マイクロワールド」は、個人客から注文をもらうためのアプリをモニターに表示します。

マイクロワールド(LOGO言語)で作った、「お昼の音楽」というアプリ作品で、放送で流す曲目をクリックすると、どうなるでしょう。アプリから、営業会社「マイクロワールド」に音楽ファイルを再生する注文が届きます。営業会社「マイクロワールド」は、受け取った注文を商社「ウィンドウ」の中にいる数千人の商社マンの中から、選んだ社員に「ウィンドウ」が決めている書式に直してから、注文します。注文を受けた社員は、インテルさんの家の職人に職人がわかる二進数の言葉に翻訳して伝えます。
プログラムの速さ プログラムの実行速度は、途中の翻訳速度で違ってきます。プログラミング言語によって、翻訳速度が違ってくるのですが、同じプログラミング言語で作られたアプリでも、命令語の使い方で翻訳の速さが違ってきます。これらの営業マンの中にスパイが入り込んだりすると、ウィルスに感染した言われます。しかし、仕事の内容によっては、これらの営業マンでは、受注できないことがあり、そのときは、インストールをして、スパイでないことを心配しながら、派遣社員を入れることをしています。

何段階にも翻訳しながら、動作することが遅くなる原因ですので、翻訳する回数を減らせば速くなります。マイクロワールドは、LOGO言語で書かれたファイルを翻訳しながら実行するインタプリタという方式です。最初から全部を翻訳してまうコンパイラーという方式にすれば、もっと速くなるのですが、インタープリタ方式は、命令の実行の様子が確認しながらプログラミングできるので、プログラミング教育に向いています。
 ▲戻る  

 ▲戻る        何でプログラミングするのか

身近な便利ソフトを作るには 「プログラムを作る」という表現は、いろいろな場面で使われています。
「時間割、日課、発表の順番などのプログラムを作るには、大きな紙に手書きをするのでしょうか。カードを貼り付けても良いかもしれません。ここまでなら、コンピュータは不要ですが、大型のモニターがあれば、ホームページとして作って提示した方がおもしろいかもしれません。マイクロワールドのオブジェクトを並べて提示するようにすれば、随時、オブジェクトを移動・修正できるし、ちょっとしたメモもすぐに書けて便利です。

放送室で曲を流すアプリ(アプリケーションソフト)は、マイクロワールドのLOGO言語で作ると印刷と曲を流す操作の両方ができて便利です。アプリを作るには、何らかのコンピュータ言語が必要ですが、言語を実行するだけでなく、言語の入力を助ける機能、編集の機能、マルチメディアを使う機能などの総合的な環境が工夫されて、言語名とは違う名前が付けれていることがあります。マイクロワールドは、LOGO言語を使って、アプリを作る入力・編集の機能と実行する機能が一体になったソフトです。アプリを作るには、いろいろな名前の入力・編集ソフトがあり、そこで記述するときの言語がLOGO言語以外にBasic言語、C言語、Pascal言語、C++言語、C#言語、Java言語・・・などがあるわけです。これらの言語では、計算ができるのでプログラミング言語と呼ばれていますが、表示だけの言語は、マークアップ言語と呼ばれ、ホームページを作るときに使われたりします。
ワープロなどの本体を作るには 文章の制作、印刷をするワープソフトの本体やLOGO言語の入力・編集・実行を行うマイクロワールドの本体などを作るには、どんな言語を使えばいいのでしょう。マイクロワールドの本体は、mwex.exe という実行ファイルになっています。このような実行システムを作るには、作りやすく、それでいて作られた実行システムが速く動作するC言語やPascal言語が使われること多いようです。例えば、ObjectPascal言語の入力・編集・実行を行うDelphiを使うと icard.exe と言った実行ファイルが作れて、単独の icard.exe だけで動くアプリを作れます。また、Delphiの本体もDelphiで作られています。

Windowsには、APIと呼ばれる、数千の実行ファイルのありますが、これらは C言語やC++言語によって作られています。

さらに、その基にあるプロセッサのプログラムは、実行速度が優先されるので、アセンブリ言語で作られています。

どれもが同じプログラム言語で作られているわけではなく、求められる速さと制作時間、プログラム言語の経費などのバランス、さらには、それぞれの国の政策など、どのプログラム言語が使われるかは、いろいろな理由があります。
 
小さなプロセッサ用  アセンブリ言語は、コンピュータの動作に近い2進数のプログラムを書けるのですが、人間が読みにくいので、人間に読みやすいコンピュータ言語として、C言語が生まれ、さらに読みやすい言語へと新しい言語が生まれてきています。しかし、人間にとって読みやすい記述をすると、プロセッサにとっては、回りくどい手順になってしまい遅くなってしまうこがあります。それで、リモコンなどに使う小さなプロセッサの場合は、すべてアセンブリ言語作られます。 
 ▲戻る  

 ▲戻る       模型のハードウェアとコンピュータの開発

身近になったドローンを見ると  校庭に集合し飛行機から写真を撮るようなことがありましたが、今は、ドローン(マルチコプター)を飛ばして上空から撮影できるようになりました。ドローンには運動靴程度の金額で買えるものもあります。スマホで使っている電波と同じ電波を使い無線操縦で自由に自転車ぐらいの速さで飛行できます。
←2万円のドローン

ドローンのプロペラを回しているのはモーターです。

←ドローンのモーター
  
3本線のモーター モーターの学習は、昔は、小学校の理科にありましたが、今は、中学校の理科で行っています。しかし、ドローンに使われているモーターには、コードが3本出ています。3本線のモーターは、電池につないだだけでは回せないのでおもちゃに使えるほど身近になった安価なコンピュータにつないで回しています。
←3本線のついたブラシレスモーター


昔は、扇風機や電車などコードが2本しかついていないモーターが普通で、2本線のおもちゃのモーターは、日本製が世界の7割以上を占めていた時代もありました。今時の扇風機や電車は、ドローンと同じ3本線のモーターを使っています。しかし、今の教科書はと言うと、昔の2本線のついたモーターを扱っています。
ドローンを開けると 昔は、日本の小中学校では、エンジンの学習をしていて、子供も模型のエンジンで遊んでいた時代がありました。そんな昔の子供たちが今の日本の高性能エンジンを作り、車産業が日本のGDPの大半を占めるようになったのでしょう。当時は、先生たちによって新しい教材がたくさんつくられていた時代です。
今や車はガソリンエンジンからモーターへと移行しつつあり、そのモーターは3本線です。日本の小中学校の学習も新しいモーターの学習に変わることでしょう。
ドローンのケースを開けると、中には、指の爪の半分より小さいジャイロセンサーやコンピュータが見えます。


小さなコンピュータ  ジャイロセンサーは、ドローンの傾きを知る為の装置でドローンが安定して飛行するために無くてはならない部品です。高性能なジャイロセンサーがなければ、二本足歩行のできるロボットや高速で安定飛行する機械(どんなものがあるかは想像してください)は作れません。今も高性能なセンサーのほとんどが日本製です。しかし、センサーは、傾き(加速)を知るだけなので、傾きを知ったらどうするかの機構がなくてはなりません。それは小さなコンピュータが行っています。

このような小さなコンピュータ(CPU)は、今は、数円から買えるものもあり、小さいものは数ミリもありません。
このような小さなコンピュータは、多少のんびりでも許される、リモコンから、高速な動作が必要とされるエンジン制御、スマホ。小ささが優先されるICカードなどで使われています。速さが優先されるものには、C言語やアセンブリ言語でプログラミングされますが、それをプロセッサに伝えるOSには、日本製のITRONが使われることがあります。
 
シリアルポート  模型をコントロールするには、シリアルポートやパラレルポートから、コントロールすることもあります。
マイクロワールドのLOGO言語でも、USBをシリアルポートとして使って、信号の入出力ができますが、動かす模型のハードウェア、小さなコンピュータの知識が必要になります。
.serialinit :ポート番号 :ボーレート
.setbaud :ボー :パリティ :ストップビット
.recc
.send :byte

 ▲戻る  

 ▲戻る       学校の日課プログラミング

掲示物と同じように順番にプログラミング 昔々、学校にコンピュータが入り始めた1980年ごろのプログラミングに命令を上から順に実行するバッチ処理というのがありました。バッチ処理を作るときは、作業したいことを1つずつカードに書いていき、一連の作業のカードが集まったら、流れの順にまとめて記述し、上から順に実行します。これをプログラミング教育として、バッチ処理で今日の日課をプログラミングしてみるとどうなるでしょう。
 朝の会

 チャイムが鳴る

 休み時間

 チャイムが鳴る

 国語

 チャイムが鳴る

 休み時間

 チャイムが鳴る

 理科

 チャイムが鳴る

---以下省略---
簡単な手順のプログラミングでは、このような記述方法は便利でしょう。バッチ処理によって、ワープロでの一連の作業や電卓よりも複雑な計算を一発で行うなど、便利な機能として使っている教員が見られました。(今なら、ワードやExcelのマクロでしょうか) 
LOGO言語で書いてみると マイクロワールドのLOGO言語で、書いてみました。→バッチ処理.mwx
手順は スタートアップ
メッセージを出す ”朝の会
メッセージを出す "チャイム
メッセージを出す "休み時間
メッセージを出す "チャイム
メッセージを出す "国語
メッセージを出す "チャイム
メッセージを出す "休み時間
メッセージを出す "チャイム
メッセージを出す "理科
メッセージを出す "チャイム
;---以下省略---
終わり
プログラミング教育の場面なら「一日の生活を時刻の順に並べてごらん」と言うことかな。でも、一日の生活をだらだらとつなげて書いたのを見ると、もう少しスマートに工夫できないものかと思いませんか。そこで、構造化というアイデアが生まれました。
 ▲戻る  

 ▲戻る        メインルーチンとサブルーチン

メインルーチンとサブルーチン 先程の今日の日課のプログラムを見ると、「チャイムが鳴、休み時間、チャイムが鳴る」という同じ処理が2回出ています。これを見ると、数学の結合法則のアイデアを思い出すでしょう。
プログラミングでも、繰り返し出てくる処理に名前をつけて部品にして使うというアイデアが出てきました。これを構造化と言います。このアイデアでプログラミングできるコンピュータ言語は、C言語、LOGO言語、Pascal言語あたりから始まり、すぐにBASIC言語でも可能になりました。BASIC言語にあった順番にプログラムを実行するための行番号が無くなるという歴史的な大変化です。
構造的な記述では、全体の流れを決める部分をメインルーチンとし、繰り返し使う部品にあたる流れをサブルーチンとして分けて書きます。
---メインルーチン--- 
  朝の会

  休み時間

  国語

  休み時間

  理科
---以下省略---

---サブルーチン---
 休み時間
  チャイムが鳴る
  休み
  チャイムが鳴る
 戻る
構造化で必要になる機能は、サブルーチンを読んだら、読んだ次の行に戻ってくることです。
朝の会の次の行の休み時間は、サブルーチンの休み時間を実行したら、次の行の国語に戻ります。国語の次の休み時間は、サブルーチンの休み時間を実行したら、次の行の理科に戻ります。
そんなことかと思いそうですが、コンピュータ言語で「行って、そこに戻る」という処理をさせることは大変です。今のプログラミングソフトは、ありますが、プレゼンソフトなどでは、「行って、そこに戻る」の機能は無いことが多く icard アイカード ぐらいしかありません。
LOGO言語は、関数で構造的記述 ワープロソフト、ゲームソフトなど、数万行で記述されていると、プログラミングに間違いがあったとき、どこに間違いがあるのを見つけるだけでも大変です。そこで、部分的に完成させていって、全部を合体させて作っています。構造化されて記述できることで、メインルーチンと、それぞれのサブルーチンとに分担して作業できます。

マイクロワールドのLOGO言語で構造化を意識して書いてみました。→構造化.mwx
手順は スタートアップ
 朝の会
 休み時間
 国語
 休み時間
 理科
 休み時間
;---以下省略---
終わり
手順は 朝の会
 メッセージを出す ”朝の会
終わり
手順は 国語
 メッセージを出す "国語
終わり
手順は 理科
 メッセージを出す "理科
終わり
手順は 休み時間
 メッセージを出す "チャイム
 メッセージを出す "休み時間
 メッセージを出す "チャイム
終わり
構造化して記述できるプログラミングの特徴は、ひとまとまりの作業が「手順〜終わり」というようなスタイルで区切られていることです。これは、LOGO言語だけでなくC言語、Pascal言語など他の言語に同じような仕組みになっています。
このひとまとまりは、数学の関数と同じに考えることができます。

構造化によって、サブルーチンごとに分けて作業できるようになり生産性が上がりましたが、ここで、新たに作業が見えやすなるアイデアが生まれました。 
 ▲戻る  

 ▲戻る        ボタンのイベント処理

オブジェクト 今日の日程を示すのに、朝の会、休み時間、国語、理科・・・のカードを作ってい置いて、貼り付けたらいいですね。プログラミングでも同じようにカードを貼り付けるようにプログラミングしたら、作業が見えていいですね。プログラミングの場面で画面に貼り付けるカードのようなものをオブジェクトと呼んでいます。オブジェクトには、ボタン、文字を書く欄、絵・・・などあります。さらにLOGO言語には、カメの形をしたオブジェクトがあります。
 
ボタン LOGO言語にあるボタンオブジェクトを教室で貼っているカードのように考えてみます。

オブジェクトであるボタンを左クリックすると、その名前の手順が実行されるようにしてみます。
マイクロワールドのLOGO言語で、書いてみました。→オブジェクト指向へ.mwx

手順は 朝の会
 メッセージを出す ”朝の会
終わり
手順は 国語
 メッセージを出す "国語
終わり
手順は 理科
 メッセージを出す "理科
終わり
手順は 休み時間
 メッセージを出す "チャイム
 メッセージを出す "休み時間
 メッセージを出す "チャイム
終わり
 
「ボタンをクリックすると何かを実行する」というつくり(イベントドリブン)は、VB(Visual Basic)、Dlephi(Object Pascal)、C++、C# など広く使われています。イベントは、マイクロワールドのLOGO言語では、「ボタンをクリックしたとき」「カメをクリックしたとき」「カメが色の上に乗ったとき」「色をクリクックしたとき」などがあります。
 ▲戻る  

 ▲戻る       カメをクリックのイベント

カメオブジェクトをクリック LOGO言語には、ボタンと同じようにカメのオブジェクトがあります。
カメを右クリックして、設定を開いて、命令を書いておくと、
カメがクリックされるとイベントが発生し、カメの中に書かれた命令が実行されます。→サンプル作品

カメオブジェクトの状態 カメのオブジェクトでは、カメのいる場所を かめの情報 をクリックするとわかります。まるでカメが学習するように 手順作成 を開いて、このカメ独自の命令を追加することができます。
亀には、いろいろな亀がいるように、カメを右クリックして形のパレットを開き、カメの形を変えることができます。
→ サンプル作品
 
 ▲戻る  

 ▲戻る       マルチタスク  

マルチタスク 休み時間にA君とBさんが歩いています。これをプログラミングするには、どうしたらよいでしょう。
オブジェクトがあるので、A君、Bさんをオブジェクトで作ればよいでしょう。
オブジェクトのA君をクリックすると、A君が動きというタスクが始まる。オブジェクトのBさんをクリックすると、Bさんの動くというタスクが始まる。と考えます。複数のタスクがあるので、マルチタスクと呼びます。

マイクロワールドのLOGO言語で、作ってみました。→マルチタスク.mwx
   

無限 この作品のように、マルチタスクでは、A君とBさんは、独自に動いています。
オブジェクトを右クリックして、中を開くと、無限に にチェックが入っています。

LOGO言語では、無限 に繰り返しているオブジェクトは、マルチタスクとなり、独自に動くことができます。
このようなマルチタスクは、プログラミングの歴史上では画期的な機能です。コンピュータの中ではタスクが増えるごとにタスクの開始位置(戻り位置でもある)が記録されてメモリーが使われていきます。間違ったタスクの作り方をするとコンピュータがフリーズ状態になってしまいます。
 
 ▲戻る  

 ▲戻る       命令語の書式   

命令語の書式 中学校の技術・家庭で学習するプログラミングに用いるプログラミング言語には、LOGO言語、C言語、BASIC言語などがあります。どの言語にも命令語がありますが、命令語という言葉を予約語とか定義された単語とか基本用語とか、いろいろな言い方をされます。ここでは、命令語と呼ぶことにします。
体育のときに命令語がありますね。 「右向け 右」という使い方はどうでしょうか。右向けという言葉と右という言葉で、命令しています。これを書式で表すと右向けが命令語で、右がインプットとなり、 
   命令語 インプット
と書けることがわかります。
LOGO言語でも、命令語は、同じ書式になります。
もしも、
命令語とインプットの間のスペースを忘れて書いて
   命令語インプット
という書き方にすると命令語とインプットの区別ができなくなり、エラーになります。
体育のときの「右向け 右」で90度右へ向くことをLOGO言語で書くと
    右へ 90
となり、わかりやすい表現になります。
 ▲戻る   

 ▲戻る        命令語を試す

命令語を試してみよう 命令語を試してみましょう。
カメを1匹貼り付けた状態でコマンドセンターに
   前へ 100 
と書いて、この行の上で、Enterキーを押すとカメが100ドット進みます。→サンプル作品

前へ が命令語で、 100 がインプットです。

授業の演出 授業では、ここまで、説明して生徒が実行したら、聞いてみます。
「命令語として 前へ があるなら 後ろへ もあるのかな?」
じゃあ、試してみようということになるでしょう。
 後ろへ 100 
真っすぐに進むだけでは困ります。曲がるにはどうしたらよいでしょうか。
 右へ 90 
と書いてEnterキーを押すと、カメが右を向きます。ここまでくると、当然、「右へ があるなら、 左へ もありそうだ。」
ということになるでしょう。
 左へ 90 
コンピュータ言語としては、右へ があれば 左へ は必要ありません。左へ も準備されているのが子供向けのコンピュータ言語ということなのでしょう。
もしも、左へ という命令語が無かったら、どうする? と聞いてみましょう。
答えは、
  右へ -90 
このとき、注意するのは、90 の間を開けずに -90 とつなげて書きます。これも質問してみると楽しいですね。どんな回答があるか、算数の計算の意味が再確認されますね。
理由は、-90は、負の数を表すけど、- 90 とスペースを入れると引き算の計算式を書いたことになるからです。
ダメ押しで、「後ろへ が無かったらどうする?」と質問してみましょう。今度は、ほとんどの生徒がわかるので大喜びで答えるでしょう。正解は・・・
  前へ -100
間違えて、 前へ - 100 と書いた生徒は、先生が教える必要はないでしょう。回りの生徒が喜んで教えるはずです。
プログラミング教育がこれまでの授業と違うのは、生徒が話を聞いているだけだったり、間違えたままだと次に進めないことです。生徒一人一人が着実に学習を進めるような授業を進め方、演出が必要です。
 
 ▲戻る    

 ▲戻る       命令語は関数      

関数表記 LOGO言語の書式は、 命令語 インプット という書き方ですが、このように書いたものを関数と言います。
算数では、式でグラフを描いたりすることがあります。中学校では、グラフの式などを関数と呼んでいて、 Y = aX というような書き方をします。この関数の式は、高校では、f(X) と書くことがあります。
LOGO言語の書式は、高校で学ぶ関数の書き方に似ています。 命令語  インプット をもっと数学風に書くと 命令語(インプット) となるでしょう。
だったら、 前へ(100) と書けばいいじゃないかと思いますね。そのような書き方をするコンピュータ言語もあるので、命令語が関数だということが理解できていれば、LOGO言語を学習することで、他の言語もすぐに理解できるようになります。関数であると理解しないで学習していくと、丸暗記になってしまい応用が利かず楽しく無くなってしまいそうですね。
命令語の作り方は、新しいプログラミング言語として、いろいろな方法が研究されてきましたが、結局は、今の関数表記が基本です。
 ▲戻る     

 ▲戻る       命令語を作る   

LOGO言語の命令語  LOGO言語の命令語はどれくらいあるのでしょう。
マイクロワールドのLOGO言語は、教育用コンピュータ言語として開発されたので、開発当初に小学校でLOGO言語を使い、どのような命令語が必要か調査しながら、命令語が作られました。命令語が全部で242あります。
 
新しい命令語を作る もしも、「242語の日本語でしゃべってください」と言われたら、簡単なことしか話せなくなってしまうでしょう。LOGO言語だって言語ですから、242語しかなければ、できることが少なくなってしまいます。
LOGO言語は、関数表記ができるので、新しい命令語が作れます。
新しい命令語を作るときは、最初から作られている命令語を集めて、新しい命令語にします。それが手順という書き方です。例えば、カメをゆっくり前へ進める命令語がほしいとき ゆっくり前へ という命令語を作ってみましょう。
サンプル作品
手順は ゆっくり前へ :歩数
繰り返す :歩数 「前へ 1 待つ 1」
終わり
命令語とは、関数ですので、 ゆっくり前へ が命令で :歩数 がインプットということになります。このときの :歩数 を変数と呼んでいます。変数は、数字や文字を格納する容器です。算数では、 X とか Y を使っているので、 :歩数 の代わりに :X と書いても同じです。
この関数を使うときは、例えば、 ゆっくり前へ 100 とコマンドセンターに書いてEnterキーを押します。あるいは、ボタンに書いて、ボタンをクリックすることで実行できます。あるいは、カメの中に書いて、カメをクリックしても実行されます。このとき、変数 :歩数 には、100 という数字が格納されています。
これで、命令語は、全部で243になったわけですが、内訳は242個が予約語で1個が新たに作られた命令語、つまりプログラミングされたわけです。
 ▲戻る     

 ▲戻る        不完全な関数

関数とは 関数とは、どのようなものなのかを中学校ではブラックボックスを使って説明しています。「関数とは、ブラックボックスのことで、ブラックボックスに何かを入れると、何かが出てくる」と説明しています。
 何か入力する → ブラックボックス(関数) → 何かが出てくる

ところが、実際には、不完全な形の命令語が多く使われています。
不完全な関数とは、インプットが無い関数やアウトプットが無い関数、あるいは、インプットもアウトプットもなくて状態を操作するだけの関数です。
OUTPUTだけ LOGO言語のインプットの無い関数の例としては、 向き とか  という命令語があります。
コマンドセンターで 向き と書いて、Enterキーを押してみると、インプットが無いのにアウトプットが出てきます。アウトプットされた数字は、どこにも使われていないのでエラーとしてコマンドセンターに表示されます。
サンプル作品
同じようにコマンドセンターに  と書いてEnterキーで実行してみてもアウトプットが出てきて、エラーになります。LOGO言語では、アウトプットしかない命令語をレポーターと呼び、それ以外をコマンドと呼ぶことがあります。

INPUTだけ では、反対にインプットしか無い関数とは、どんな命令かと言うと、 向きは とか 色は という命令語があります。
コマンドセンターに 向きは 0 と書いてEnterキーを押すと、カメが0度の方向を向きます。向きは 90 と書いてEnterキーを押すとカメが90度の方向を向きます。色は の命令語も 色は 1 と書いてEnterキー、色は 2 と書いてEnterキーと試してみましょう。
サンプル作品
ここで気づくと思いますが、 前へ 100 と実行したとき、アウトプットが出てきてエラーとならなかったのだから、前へ という命令語は、アウトプットの無い関数だということがわかります。
INPUT、OUTPUTがある では、完全な関数の形をした命令語には、どのようなものがあるのでしょうか。 乱数 という命令語は、インプットもアウトプットもある命令語です。コマンドセンターに 乱数 20 と書いてEnterしてみましょう。
サンプル作品
インプットが20で、使われていないアウトプットによってエラー表示が出ます。

バッチ処理以上のプログラミング言語にとって関数は必須です。しかし、それぞれの言語で呼び名が違っています。「LOGO言語では、ファンクションもプロシージャも手順と書くんだ」とわかっていれば、他の言語を見てもすぐに理解できるでしょう。
  
 ▲戻る      

 ▲戻る        完全な関数を作る   

  LOGO言語では、新しい命令語を 「手順は 〜 終わり」で作ります。「手順は」と書いていますが、不完全な関数も完全な関数も作れます。
ボタンをクリックすると、カメが散歩する(動く)という命令語をそれぞれの作り方で作ってみましょう。
 
 INPUT、OUTPUTが無い関数を作る (1)INPUT、OUTPUTが無い関数「散歩」を作る→INPUT、OUTPUTが無い.mwx

 
 INPUTだけある関数を作る (2)INPUTがある関数「散歩」を作る→INPUTしか無い.mwx
INPUTは、手順の名前の右に書いた :歩数 で受け取ります。
 
完全な関数を作る (3)INPUT、OUTPUTがある関数「適当に散歩」を作る→INPUT、OUTPUTがある関数.mwx
INPUTは、:歩数で受け取り、OUTPUTは、表示 で返します。


ほとんどのプログラミング言語で、関数を作ることが基本です。関数では、INPUTで受け取る数を「引数(ひきすう)」、OUTPUTで表示する数を「戻り値」とか「返り値」と呼びます。LOGO言語での関数の基本を理解しておけば、他のプログラミング言語の理解も容易です。
 ▲戻る       

 ▲戻る       プログラムの書式  

美しく書く  LOGO言語でプログラミングすることの大半は、手順を書くことです。手順を書く場所は、カメの中とタグエリアにあります。
必ず守らなくてはいけないのは、命令語は、スペースや「」で区切って書き、行の最後でEnterキーを押すことです。
Enterキーを押すと、画面には表示されませんが、コントロールコード13が書き込まれています。見えないのですが、これが正しく書き込まれていないと、エラーになります。後は、自由に書いても良いのですが、これはノート指導と同じで、読みやすい書き方を工夫していく必要があります。
正方形を描くプログラミングをいろいろな書き方で比べてみましょう。
 
汚い書き方 (1)改行しない書き方→正方形1.mwx
手順の中を1行で続けて書いていったプログラミングです。手順の欄の右端で、折り返していますが、Enterキー押されていないので、コンピュータの中では、つながった文字列として扱われます。

手順のタブを広げると、つながっていることがわかります。

 
少しいい (2)改行した書き方→正方形2.mwx
改行することで、見やすくなり、繰り返している場所が明確になります。
 
見やすい書き方 (3)繰り返しを使って書く→正方形3.mwx


基本の書き方  (4)読みやすさを優先した書き方→正方形4.mwx
簡単なプログラムなら、上記の方法で十分に感じます。しかし、いろいろな作品を作っていくと気づくことなのですが、もう少し工夫した書き方をすることが基本です。
 
青字で書いた部分は、手順の外なので、実行されず、エラーにもなりません。
赤字で書いた部分は、最初に ; が書かれていて、以降の文字が実行されないので、エラーになりません。
これらの方法で、プログラムの説明を書いておくと、後で読み直すときにわかりやすくなります。
繰り返しの と は、対応している必要があるので、インデントをつけて書くと間違いなく対応して書けます。
  小さな作品ばかり見ている気づきにくいものですが、たくさんの友達の作品を見ていくと、読みやすい書き方に気づいていくことでしょう。
簡潔な記述、論理が見やすい記述、独創的なアイデアの記述など、美しい記述に心がけたいものです。
 ▲戻る      

 ▲戻る       再帰処理 

だんだん速くなる 中学校の理科で「だんだん速くなる運動」という学習があります。
等加速度直線運動のことなのですが、高校に行ったら、数学式で説明するからなんていう、説明にならない説明があったりして、「だんだん速くなる運動」なんていう表現をしています。
Logo言語で書くなら簡単です。
だんだん速く.mwx

「だんだん速く」という関数を作り、ボタンをクリックして、INPUTを0から、「だんだん速く」を呼びます。「だんだん速く」の最後の行で、INPUTを0.0001だけ増やして、自分自身を呼べば、だんだん速くなります。

再帰処理  このような処理は「再帰処理」と呼ばれ、無限に実行されるので、ある条件になったら、止めるようにします。
再帰処理では、関数から関数が繰り返し呼ばれる無限処理です。どこから関数を呼んだかの印がメモリーの中に書き込まれていくので、条件を決めて、止めるようにしておかないと、メモリーが使われていきコンピュータが異常状態になってしまいます。LOGO言語の中では、 無限に というチェック場所があるので、安易にチェックを入れやすいのですが、再帰処理がわかっていれば 無限に の設定に慎重になるはずです。
 
 ▲戻る     

 ▲戻る       グローバル変数とローカル変数   

参照範囲 プログラミング言語で使う変数には、数値や文字が格納されます。
変数には、グローバル変数とローカル変数があり、参照できる範囲が違います。
グローバル変数  (1)グローバル変数
一般的にプログラム言語では、文字の変数か数値の変数かを宣言するのですが、LOGO言語では、格納されるデータで自動的に判定させます。
 名前は ”友達の名前 ”花子  ”友達の名前 という変数に ”花子 が格納されます。
読みだすときは :友達の名前 とします。
ボタンの中で、変数を宣言して試して見ましょう。→グローバル文字変数.mwx
名前は ”友達の名前 ”花子 のボタンをクリックすると、グローバル変数の 友達の名 に 花子 が格納されます。
データは :友達の名前 のボタンをクリックすると、格納されていた 花子 がデータ に出力されます。


グローバルな数値変数として使うときは、 名前は で、数値を入れれば、自動的に数値変数になります。
 名前は ”友達の数 1  ”友達の数  という変数に 数字の 1 が格納されます。
読みだすときは :友達の数 とします。
ボタンの中で、変数を宣言して試して見ましょう。→グローバル数値変数.mwx
グローバル変数は、データを格納すると、コンピュータの電源を切るまで、格納されています。
 
ローカル変数 (2)ローカル変数
INPUTのある関数を作るときに使う変数は、ローカル変数になっています。ローカル変数は、その手順の中だけで使える変数なので、手順の外にあるボタンから使おうとしてもエラーになります。
引数はローカル変数.mwx
宣言 ”花子 のボタンをクリックすると、:友達の名 という名前の変数が作られて、”花子が格納されます。
手順の中で、データに 花子 と出力して、変数の :友達の名 は消えます。
ですから、 データは :友達の名 のボタンをクリックしても、既に :友達の名 は消えているので、” 花子 は出力できずエラーになります。


INPUTが無いときは、仮の名前は でローカル変数を作ります。
 仮の名前は ”友達の名 ”花子 友達の名 という変数に ”花子 が格納されます。
読みだすときは :友達の名 とします。
宣言 のボタンをクリックすると、手順の中で データに 花子 が出力されますが、データは :友達の名 のボタンをクリックすると手順が終了しているので変数が消えていてエラーになります。
ローカル変数.mwx

 ▲戻る    

 ▲戻る       リスト処理 

リスト処理 文字変数には、文字が格納されますが、文字をスペースで区切ったものをリストと呼んでいます。
LOGO言語のリスト処理は、他の言語の中でも優れています。
リスト処理.mwx

をクリックすると、
変数 :命令 に「前へ 後ろへ 右へ 左へ」がリストの形式で格納されます。リストは、スペースで区切られるので、「前へ」「後ろへ」「右へ」「左へ」という4個のワードの集合になっています。

を左クリックすると
変数 :命令に入っている リストの中の最初のワードである「前へ」がコマンドセンターに書かれます。

を左クリックすると
変数 :命令 の2番目以降のワードである「後ろへ」「右へ」「左へ」がコマンドセンターに書かれます。

を左クリックすると、
変数 :命令の 最後のワード「左へ」がコマンドセンターに書かれます。

を左クリックすると、
変数 :命令 にあるワードの一つが、ランダムに選ばれてコマンドセンターに書かれます。

を左クリックすると
変数 :INPUT に 数値の 90 が格納されます。

を左クリックすると
どれか で選ばれた :命令 の中のワードの一つと :INPUT の90がリストになります。
リストは、スペースで区切られているので、 「右へ 90」のような書式になります。

を左クリックすると
:命令 のワードの一つと :INPUT の90 がリストになった「前へ 90」とか「右へ 90」がランダムに実行されます。
一般的なプログラミング言語でも文字を足して、文字列を作ることができますが、LOGO言語では、作った文字列を変数名や命令語として利用することができます。

 ▲戻る     

 ▲戻る       カレントなカメ

カレントなカメ カメやボタンは、オブジェクトです。ページにたくさんのオブジェクトが使われたときは、どのオブジェクトに命令するのか指定する必要があります。

ページにカメが3匹つくり、名前を ”赤亀 ”青亀 ”緑亀 とします。ボタンから 前へ 100 と命令すると、最後にクリックしたカメが動きます。このときのカメをカレントなカメと言います。
カレントのカメ.mwx
 

を左クリックすると、最後にカレントにしたカメが動きます。

を左クリックすると 赤亀、 (
がついている)の命令で、 赤亀(赤いカメ)がカレントになり、赤いカメが動きます。 カンマ 、 がカレントにする命令です。

を左クリックすると、同時に赤亀、青亀 がカレントになり、2匹が動きます。

を左クリックすると、全部のカメが同時にカレントになり、3匹が動きます。

 ▲戻る      

 ▲戻る        カメのいろいろなイベント処理

  オブジェクトであるカメには、カメをクリックした、カメが色に乗った、カメとカメが衝突したというイベントを持っています。 
クリックイベント (1)カメをクリックしたときのイベント
カメをクリックして、プログラムを実行させたいときに使います。
カメの中に命令を書くことでカメをクリックすると、カメの中の命令が実行されます。
正三角形.mwx

カメを右クリックして設定を開き、カメの名前を 正三角形 にして、命令に 正三角形 と書きます。

設定の手順作成を開き、正三角形を描くための手順を書きます。(タブエリアの手順でも動作します)

 
色に乗ったイベント (2)カメが色の上に乗ったときのイベント
カメがページの上で動いているとき、カメが色の上に乗ったことを判断して、プログラムを実行させたいときに使います。
カメの右クリックして、設定の中の追加設定に命令を書くことで、カメをクリックして、動き出したカメが赤い色の上に乗ると、メッセージを出します。
赤です.mwx

カメを右クリックして、設定を開き、名前を 赤を調べるカメ として、命令に 前へ 0.1 と書き、無限に にチェックを入れます。


追加設定 を開き、色への命令 で色を赤いにして、 命令に 赤です と書きます。


手順作成 を開き、 赤です の手順を作成します。(タブエリアの手順でも動作します)

エクスポート
インポート
カメオブジェクトは、エクスポートによって、カメをファイルにして、友達に渡せます。

もらった友達は、カメのインポートによって、もらったカメを自分の作品の中に入れられます。

正三角形.mwa
赤を調べるカメ.mwa
 
カメとの衝突イベント (3)カメとカメが衝突したときのイベント
カメを右クリックして設定の追加設定に命令を書くことで、黒いカメをクリックすると動き出し、赤いカメに衝突するとメッセージを出します。
カメとカメの衝突.mwx

カメを2匹つくり、名前を 赤いカメ と 調査カメ にします。
調査カメを右クリックして、設定を開き、命令に 前へ 0.1 と書き、無限に にチェックを入れます。 

追加設定を開き、衝突命令に メッセージを出す ぶつかったかめ と書きます。

※ 衝突判定は、無限ループで行っています。衝突判定から、無限ループの関数を呼び出すと、無限に無限となりスタックが足りなくなり、作品がフリーズ状態になる場合があります。うまくいかないときは、手順でのイベント判定で行います。
 
手順でカメをクリック (4)手順から、カメへイベントを送る
カメをクリックするのではなくて、手順の中で、カメをクリックする方法です。
あいさつ のボタンをクリックすると、タブエリアに書かれた手順の中から、女の子 と 男の子 のカメにクリックのイベントを発生させます。(カレントなカメを参照)
あいさつ.mwx

※ 全部「クリックオン」 でも同じで
 
手順で衝突判定 (5)手順でのカメとカメの衝突イベント判定
カメの中の衝突判定ではなくて、無限に手順で衝突を判定する方法です。
全部「クリックオン」のボタンをクリックすると、青いパックンが動き出します。青いカメと赤いカメは、無限ループで衝突判定を行っていて、パックンが衝突すると、メッセージを出します。
手順でカメとカメの衝突.mwx
カメを3匹作り、赤いカメ、青いカメ、パックン にして、赤いカメと青いカメの命令に 衝突判定 と書いて、無限に をチェックする。

パックンの命令には 前へ 0.1 と書いて、無限に をチェックする。
タブエリアの手順に 衝突判定 の手順を書く。
パックンが衝突した、すぐ後は、まだ衝突しているので、パックンが通り過ぎるまで、隠れる で姿を消しています。

色がカメとの衝突を判定 (6)色からのカメの衝突判定
カメの中や手順で衝突判定するのではなくて、ページに塗られた色にあるイベント処理を使って、カメが色と衝突したことを判定する方法です。
カメをクリックすると動き出します。
赤色は、カメが乗るとイベントを発生して手順を実行してメッセージを出します。
色から赤です.mwx

かめ1を作り、 命令に 前へ 0.1 と書き、無限に にチェックを入れます。
ペイトンツールで赤い
を塗り、赤色の上で右クリックして、設定を開き カメの欄に 赤です と書きます。

タブエリアの手順に 赤です の手順を書きます。
 
 ▲戻る