LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

LOGO

LOGO(ロゴ)は、教育で使われているマルチパラダイムのコンピュータプログラミング言語である。関数型プログラミング言語のLISPを原型とし、元々は関数型言語のように書かれ、出力機器としてタートルと呼ばれる機械を操作していた。また、リスト、ファイル、I/O、再帰などを扱う重要な能力を備えていた。今日、主にそので記憶されているが、第3期の教育で教える言語はSchemeやスクリプト言語に置換されてきた。1967年、教育(特に構成主義教育)のために、、、シーモア・パパート、シンシア・ソロモンによって開発された。名称はギリシャ語の "logos" (言葉)に由来し、他の既存の言語が数を処理するようにLOGOでは単語を処理することを強調している。多くの計算機科学の概念を教えるのに使うことができ、例えばカリフォルニア大学バークレー校の講師は3巻の著書 "Computer Science Logo Style" にまとめている。コンピュータの使用を通じた児童の思考能力の訓練を目的としており、主に8歳から12歳の児童にも扱い易いよう配慮された豊富なグラフィック関連のコマンドが特徴である。主な使用者は学生、教師が想定された。1967年、マサチューセッツ州ケンブリッジにある研究機関 Bolt, Beranek and Newman (BBN) にて、Wally Feurzeig とシーモア・パパートが開発した。人工知能、数理論理学、発達心理学の成果を基盤としている。最初の4年間は、BBNにてLOGO開発とLOGOによる教育の研究が行われた。最初の実装はGhostと呼ばれ、SDS 940上のLISPで書かれていた。その目標は子どもが単語や文で遊べる数学の遊び場を作ることだった。LOGOの設計では、しきいが低く使いやすいことと、エラーの原因がわかりやすいことが重視されている。タートル(亀)を採用したのは、視覚的フィードバックが即座に得られ、デバッグを即座に行えるからだった。LOGOで操縦可能な亀のロボットがMITで作られたのは1969年のことであり、それ以前から画面上で動作する仮想的なタートルが存在していた。現代のLOGOも、その最初のタートルの基本コンセプトからそれほど変わっていない。最初の亀ロボットは有線式であり、ラジコンあるいは無線操縦ではなかった。後にBBNはIrvingという亀ロボットを開発しており、それは触角センサを持ち、前進、後退、回転といった動きができ、ベルを鳴らす機能も備えていた。1968年から69年にかけて、マサチューセッツ州レキシントンの中学校で1年間かけたLOGO教育が実施されている。仮想的なタートルや亀ロボットを最初に教育に取り入れたのは同じレキシントンの小学校(5年生)で、1970年から71年にかけてのことである。LOGOは通常インタプリタとして実装されるが、最近ではコンパイラとして実装したものもある(LhoghoやLiogo)。大文字と小文字は区別しないが、出力では大文字/小文字を保持する。ブロック構造を持つ逐次的プログラミング言語と関数型プログラミング言語を折衷したものといえる。標準規格は存在しないが、UCBLogoが高く評価されている。教育用言語ではあるが、リスト処理能力の高さから実用的なスクリプトが非常に書きやすくなっている。LOGO最大の特徴はタートルであり、画面上のカーソルで表され(タートルと呼ばれるようになったのは、先述の亀のロボットから)、それに動きと線描を命令することができ、プログラムに基づいて線で描かれたグラフィックスを生成できる。三角形または亀の形で表されることが多い(実際にはどんなアイコンでもよい)。シーモア・パパートがLOGOにタートルグラフィックスを追加したのは1960年代末ごろで、パパート自身が開発した亀ロボットに上げ下げ可能なペンを装着させて描画できるようにしたことからである。実際問題として、それ以前からあるグラフィックス描画のモデルではなくタートルを採用したことで、LOGOでは亀ロボットの操縦を真似た形でグラフィックスを描画するようになった。そのためデカルト幾何学のように (x,y) で座標を指定するのとは異なり、ユークリッド空間的に相対的な距離と角度を指定することで描画する。タートルは命令を受けるとその時点の位置と向きを起点として動作し、例えば "LEFT 90" と命令すれば左に90度回転する。子供は、自己と一体化しやすいタートルを操作してその軌跡を図形として描いたり色を塗ったりして楽しむ事が簡単に出来る。パパートはこれを body-syntonic reasoning(身体同調性推論)と呼んだ。特に複数のタートルを同時に操作可能なLOGO実装では、タートル(カーソル)の見た目を再定義でき、しかもタートル同士の当たり判定ができるようになっているものがあり、タートルをスプライトのように機能させることができる。タートル方式は絶対座標指定方式の代替としてLOGO以外の環境でも使われることがある。例えば、フラクタルを生成するL-systemの描画にはタートル方式が適している。UCBLogoには次の3種類のデータ型がある。数はワードの特殊ケースと解釈される。静的型付けではなく、インタプリタが文脈からデータ型を検知する。次の2つの記号は重要な意味を持つ。数はその点で特別であり、本当はダブルクオート付きで書く必要があるが、2 も "2 も同じに扱われる。変数への代入(例えば、codice_3)は、LOGOではcodice_4コマンドで行う。例えば、以下の2つの文は等価である。codice_4は2つのパラメータをとり、この例での2つ目のパラメータは codice_6 である。codice_7 は2つのパラメータをとる演算 (operation) であり、2つのパラメータの和を計算する。codice_8 を評価すると codice_9 となり、codice_10 は codice_11 と呼ばれるものの中身をとる。その結果、両者を加算した和が数として得られる。codice_4 は第二パラメータを評価した結果を第一パラメータに格納する。プログラミングの観点から言えば、codice_4の第一パラメータは参照渡しで、第二パラメータは値渡しである。通常は変数を使用前に宣言せず、変数スコープは大域的である。codice_14 と宣言した変数は宣言したプロシージャおよびそのプロシージャを呼び出す任意のプロシージャに限定される(動的スコープの一種)。入力(LOGOでは引数を入力 input と呼ぶ)のあるプロシージャでは、引数値を保持するローカル変数が生成される。LOGOはLISPからリストを継承しており、ベクトルを格納する主要な手段となっている。配列も用意している。LOGOには、if文、while文、do-while文、回数指定のループといった、いくつかの一般的制御構造を備えている。一般にLOGOではループよりも再帰を好んで使用する。また、リストベースの制御構造もある。基本的な考え方は次のように2つのリストを使う。そうすると、コマンド群がリストの個々のアイテムに適用される。MAP, APPLY, FILTER, FOREACH, REDUCE, CASCADE といったテンプレートコマンドがある。テンプレート反復は、explicit-slot、named-procedure、named-slot(またはLambda)、procedure-text の4種類に分類される。属性リストは特殊なリストで、奇数番目のアイテムは属性名、偶数番目のアイテムは属性値となっている。属性リストを操作するコマンドとして以下の3つがある。コマンドウィンドウ(出力ストリーム)にテキストを書き込むには codice_18 コマンドを使い、グラフィックスウィンドウにテキストを出力するには codice_19 コマンドを使用する。キーボードからの通常の入力ストリームから入力を受け付けるコマンドとして、codice_20、codice_21、codice_22 がある。入力ストリームはディスク上のファイルなどから入力するよう切り換えることができる。同様に出力もリダイレクト可能である。コマンドは1行または複数行で書かれる。多くのコマンドには短縮形があり、例えば codice_23 は codice_24、codice_25 は codice_26 と短縮できる。これは児童のタイピングの手間を省くという意味がある。セミコロンから行末まではコメントとして無視される。LOGOでの Hello world プログラムは次のようになる。ループ用コマンドは3種類ある。その1つが REPEAT で、次の例は正方形を描画する。この場合、codice_27 というコマンドを4回実行する。近似的に円を描くには、REPEAT 360 [FD 1 RIGHT 1] のように1度ずつ回転して1単位だけ描画するコマンドを360回反復すればよい。ループは入れ子可能であり、次のようなちょっとしたコードで面白い図形を描画できる。次もループの入れ子の例である。タートルは、その尻尾にペンをつけた形のアナロジーで使われることが多い。タートルのペンは上げ下げでき、次のように破線を描くことができる。LOGOの設計は「しきいは低く、天井はない」(low threshold and no ceiling) という精神で貫かれており、初心者にとってはとっつきやすいが熟練したユーザーが使えば高度なこともできる。アニメーションを行うには図形を描画し、それを消去する機能を必要とする。タートルのアナロジーでは、タートルが描画だけでなく消去もできなければならない。UCBLogoでは PENERASE (PE) というコマンドで既に描かれているものをタートルが消去することができる。その状態でFDコマンドを使えば、タートルが通った跡に沿って既に描画されていたものが消去される。再び描画状態にするには PENPAINT (PPT) コマンドを使用する。各行は関数またはサブルーチンの呼び出しであり、それには次の2種類がある。コマンドはPascalのプロシージャに似ており、演算はPascalの関数に似ている。 (CQS) で言えば、LOGOの演算はクエリに相当する。返す値がcodice_32またはcodice_33というワードに限定されている演算を述語 (predicate) と呼び、慣習として名前の最後にcodice_34をつける。例えば、codice_35、codice_36、codice_37 などがある。プロシージャは、TOとENDで囲まれたコードで次のように定義できる。なお、初期の実装では物理的に1行で入力できる範囲でしかプロシージャを定義できなかった。LOGOではEDALLなどのコマンドでエディタを呼び出すことができる。エディタではプロシージャを複数行で記述でき、完了するまでその内容をインタプリタが解釈することはない。新たに定義したプロシージャは名前に対応するワード(上記の例ではCHAIR)としてセーブされるが、LOGOのセッションが終了すると忘れられてしまう。上の例の場合、プロシージャを定義した後は codice_38 と入力すれば codice_39 というコードが実行される。つまり codice_38 というワードはコマンドのように使うことができ、例えば codice_41 とすれば codice_38 の操作が4回反復される。codice_43はグラフィックスウィンドウをクリアするコマンド、codice_44は指定した時間だけ待つコマンドである。次のようにすればアニメーションが可能となる。LOGOではプロシージャに追加情報を渡し、プロシージャが情報を返すことができる。追加情報を使用するプロシージャは、定義の際にそれらに名前をつける。その場合、名前の前のコロンをつける。情報は値渡しであり、コロンは「-の値」を意味する。次の例のように CHAIR 200 という形でプロシージャを呼び出せば、:thesize に200という値がセットされ、FD :thesize とすることで、FDに対して200という値を指定して実行することになる。数式は前置記法が基本であり、codice_45 のように記述する。中置記法も可能である。キーワードについての説明はcodice_46コマンドで表示できる。その際キーワードの前にダブルクオートが必要である。LOGOは再帰呼び出しが可能であり、プロシージャの定義内でそのプロシージャ自身を呼び出せる。再帰呼び出しを活用してコッホ曲線やヒルベルト曲線、二進木を簡単に描くことができるのもLOGOの大きな特徴である。教育現場では一般的に、子供に思い思いの図形を定義させ、図形に潜んでいる規則性に気づかせるというような指導が行われている。本来のコマンドは英単語を基本としているが、各国語に移植された結果、様々な言語を元にしたコマンドが開発されている。例えば日本語化されたコマンドを持つLOGOでは、codice_23を「まえへ」、codice_25を「みぎへ」などとしているものがある。2012年11月時点で、261の実装や方言があり、それぞれに特徴がある。その多くは歴史的なもので既に使われていないが、今も活発に開発されているものもある。標準規格がないが、言語の中核的部分については大まかな合意が形成されている。それでも様々な方言があり、相互に完全な互換性がない。単にの描画プログラムをLOGOと呼んでいる場合があり、状況を混乱させている。1980年代初頭から中ごろにかけて、Apple II用の Apple Logo やTI-99/4A用の TI Logo が発売され、初心者のプログラミング入門に最適と宣伝された。このころ欧米の小学校での教育によく使われ、LOGOの最盛期だったといえる。Apple Logo を開発したのはLCSIで、これ (LCSI Logo) が初期のLOGO実装として広く普及した。今日ほぼデファクトスタンダードとされているのがブライアン・ハーヴェイの開発したUCBLogo (Berkeley Logo) である。フリーかつクロスプラットフォームの実装だが、GUIは初歩的なものしかなく、そのインタフェースを改良するプロジェクトがいくつかある。Microsoft Windows 向けに拡張したとその後継であるは、イギリス、オーストラリア、ギリシャの学校でよく使われている。製品として販売されているLOGOも学校でよく使われており、やImagine Logoなどがある。MSWLogoは複数のタートルを扱え、3Dグラフィックスを描画できる。また、COMポートやLPTポートからの入力を扱える。またウィンドウインタフェースもサポートしており、GUIを通したI/Oも可能で、キーボードやマウスからのイベントを扱える。MSWLogo 6.5 では gifsave コマンドで簡単なGIFアニメーションも生成できる。最近の実装では、数千ものタートルを同時に扱える。代表的な実装として、MITのStarLogoとCCL (Center for Connected Learning) のNetLogoがある。これを使って創発現象など、社会学、生物学、物理学などの分野の研究も行われている。多くのLOGO実装は2Dグラフィックスしか扱えないが、Elicaなどは3Dグラフィックスをサポートしている。多くの実装はインタプリタだが、Elicaの作者はLhoghoというコンパイラも開発している。元々タートルは単純なロボットに対する操作をコンピュータ上で再現した物であるため、ロボット操作との親和性が非常に高い。そのためロボット制御ができる実装もある。例えば、レゴで作ったものをLOGOで操作するということも行われていたが、後にMINDSTORMSとして発展させた際に別の言語を採用した。その元になった Crikets はレゴとMITが共同開発したもので、そのための Criket Logo が開発された。オブジェクト指向的拡張を施した実装としてなどがある。LOGOを3次元グラフィックスに拡張した実装としてLogo3Dもある。Javaで実装されたオープンソースのLOGOとして Daniel Azuma の開発したTurtleTracksがある。これは BSD Logo に拡張を施したもので、後に George Birbilis が .NET / J# に移植している。E-Slate Logo はTurtleTracksにオブジェクト指向的プリミティブ (TELL, ASK, EACH, TELLALL) を追加して拡張したもので、こちらも開発は George Birbilis である。日本で開発された、あるいは日本語版が発売されたLOGOとして以下の例がある。LOGOはプログラミング言語Smalltalkに大きな影響を与えた。オブジェクト指向がタートル・グラフィックスに起源を持つことはよく知られている。Smalltalkから派生したSqueakで書かれたプログラミング教育環境EtoysもLOGOの影響を強く受けている。学習者の学習環境として思考の表現方法としては、そのEtoys、同じくSqueakで書かれたMITのScratch、カーネギーメロン大学の、Elicaがその可能性を競い合っている。LOGOはまた、Boxerの基盤言語でもある。Boxerはカリフォルニア大学バークレー校とマサチューセッツ工科大学の共同開発プロジェクトで、「リテラシーモデル」に基づくマイクロワールドの一種である。は、緩やかにLOGOに基づいた子供向けプログラミング環境であり、KDE上で動作するKDE Education Projectに含まれる。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。