マイクロワールド   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で作られています。

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

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

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

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

←ドローンのモーター
  
3本線のモーター モーターの学習は、昔は、小学校の理科にありましたが、今は、中学校の理科で行っています。教科書にあるモーターは、2本線で、機械的に電気の流れを変化させて回しています。しかし、ドローンに使われているモーターには、コードが3本出ています。3本線のモーターは、小さなコンピュータによるソフトウェアで電気の流れを変化させて回しています。

←3本線のついたブラシレスモーター

ドローンを開けると 昔は、小中学校ではガソリンエンジンの学習をしていて、子供も模型のアルコールやガソリンのエンジンで遊んでいた時代がありました。今は、車もおもちゃも3本線のモーターが使われるようになっています。
3本線のモーターを使ったおもちゃのドローンのケースを開けると、中には、指の爪の半分より小さいジャイロセンサーやコンピュータが見えます。


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


このような小さなコンピュータは、多少のんびりでも許される、リモコンから、高速な動作が必要とされるエンジン制御、スマホ。小ささが優先されるICカードなどまで使われています。このような小さなコンピュータでのプログラミング言語には、C言語やアセンブリ言語が使われることがありますがC言語やアセンブリ言語は、普段使っている人間の言葉と違うので、もっと人間が普段使う言葉に近いプログラミング言語にしたいという願いがあります。いずれにせよ、どんなプログラミング言語を使ってもコンピュータにさせたいことは同じなので、コンピュータをどのように使いたいかを考えることが重要です。
シリアルポート  模型をコントロールするには、シリアルポートやパラレルポートから、コントロールすることもあります。
マイクロワールドのLOGO言語でも、USBをシリアルポートとして使って、信号の入出力ができますが、動かす模型のハードウェア、小さなコンピュータの知識が必要になります。
.serialinit :ポート番号 :ボーレート
.setbaud :ボー :パリティ :ストップビット
.recc
.send :byte

 ▲戻る  

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

掲示物と同じように順番にプログラミング 学校のチャイムが自動的に鳴り、時間割にそって活動をしています。
一日の日課を並べてみるとプログラミングになります。

 朝の会

 チャイムが鳴る

 休み時間

 チャイムが鳴る

 国語

 チャイムが鳴る

 休み時間

 チャイムが鳴る

 理科

 チャイムが鳴る

---以下省略---
簡単な手順のプログラミングでは、このような記述方法は便利でしょう。このような作業を上から順番に並べただけで実行するプログラミングは、ワープロでの一連の作業やたくさんの計算を一発で行う方法として使われています。
LOGO言語で書いてみると 一日の日課をコンピュータで実行できるように
マイクロワールドのLOGO言語で、書いてみました。→バッチ処理.mwx
手順は スタートアップ
メッセージを出す ”朝の会
メッセージを出す "チャイム
メッセージを出す "休み時間
メッセージを出す "チャイム
メッセージを出す "国語
メッセージを出す "チャイム
メッセージを出す "休み時間
メッセージを出す "チャイム
メッセージを出す "理科
メッセージを出す "チャイム
;---以下省略---
終わり

一日の生活をだらだらとつなげて書いたのを見ると、もう少しスマートに工夫できないものかと思いませんか。
そこで、構造化というアイデアが生まれました。
 ▲戻る  

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

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

  休み時間

  国語

  休み時間

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

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


手順は スタートアップ
 朝の会
 休み時間
 国語
 休み時間
 理科
 休み時間
;---以下省略---
終わり
メインルーチン
 
手順は 朝の会
 メッセージを出す ”朝の会
終わり
手順は 国語
 メッセージを出す "国語
終わり
手順は 理科
 メッセージを出す "理科
終わり
手順は 休み時間
 メッセージを出す "チャイム
 メッセージを出す "休み時間
 メッセージを出す "チャイム
終わり
 サブルーチン

構造化して記述できるプログラミングの特徴は、ひとまとまりの作業が「手順〜終わり」というようなスタイルで区切られていることです。 このひとまとまりは、数学の関数と同じに考えることができます。
このような仕組みは、LOGO言語だけでなくC言語、C#言語など他の言語で、同じように考えられています。
ですから、LOGO言語は、入門用と分かりやすいだけでなく、LOGO言語が分かっていれば、C言語、C#言語も理解しやすくなります。

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

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

オブジェクト 今日の日程を示すのに、朝の会、休み時間、国語、理科・・・のカードを作ってい置いて、貼り付けたらいいですね。プログラミングでも同じようにカードを貼り付けるようにプログラミングしたら、作業が見えていいですね。

プログラミングの場面で画面に貼り付けるカードのようなものをオブジェクトと呼んでいます。オブジェクトには、ボタン、文字を書くテキストボックスなどがあります。さらにLOGO言語には、カメの形をしたオブジェクトがあります。
 
ボタン LOGO言語にあるボタンオブジェクトを教室で貼っているカードのように考えてみます。

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

手順は 朝の会
 メッセージを出す ”朝の会
終わり
手順は 国語
 メッセージを出す "国語
終わり
手順は 理科
 メッセージを出す "理科
終わり
手順は 休み時間
 メッセージを出す "チャイム
 メッセージを出す "休み時間
 メッセージを出す "チャイム
終わり
 

「ボタンをクリックすると何かを実行する」というつくり(イベントドリブン)は、VB(Visual Basic)、Dlephi(Object Pascal)、C++、C# など広く使われています。イベントは、マイクロワールドのLOGO言語では、「ボタンをクリックしたとき」「カメをクリックしたとき」「カメが色の上に乗ったとき」「色をクリクックしたとき」などがあります。
 ▲戻る  

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

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


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

 ▲戻る       マルチタスク(並行処理)  

マルチタスク 休み時間にA君とBさんが歩いています。これをプログラミングするには、どうしたらよいでしょう。
オブジェクトがあるので、A君、Bさんをオブジェクトで作ればよいでしょう。
オブジェクトのA君をクリックすると、A君が動きというタスクが始まる。オブジェクトのBさんをクリックすると、Bさんの動くというタスクが始まる。と考えます。複数のタスクがあるので、マルチタスクと呼びます。(実際には、LOGO言語では、A君、Bさんを順番に切り替えながら並行処理として実行しています。)

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

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

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

 ▲戻る  

 ▲戻る       命令語の書式   

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

LOGO言語でも、命令語は、同じ書式になります。
もしも、
命令語とインプットの間のスペースを忘れて書いて
   命令語インプット
という書き方にすると命令語とインプットの区別ができなくなり、エラーになります。

体育のときの「右向け 右」で90度右へ向くことをLOGO言語で書くと
    右へ 90
となり、わかりやすい表現になります。

 ▲戻る   

 ▲戻る        命令語を試す

命令語を試してみよう 命令語を試してみましょう。
カメを1匹貼り付けた状態でコマンドセンターに
   前へ 100 
と書いて、この行の上で、Enterキーを押すとカメが100ドット進みます。→前へ 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言語は、関数表記ができるので、新しい命令語が作れます。
新しい命令語を作るときは、最初から作られている命令語を集めて、新しい命令語にします。それが手順という書き方です。例えば、カメをゆっくり前へ進める命令語がほしいとき ゆっくり前へ という命令語を作ってみましょう。
ゆっくり前へ100
手順は ゆっくり前へ :歩数
繰り返す :歩数 「前へ 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 と書き、無限に にチェックを入れます。

ペイトンツールで赤い
を塗り、赤色の上で右クリックして、設定を開き カメの欄に 赤です と書きます。


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

 ▲戻る