HN 日本語サマリー

← 一覧へ戻る
プログラミング

Logoプログラミング言語

Logo Programming Language (el.media.mit.edu)

298 pointsby azhenley120 コメント

要約

Logoは、学習ツールとして設計されたLisp方言のプログラミング言語です。その特徴であるインタラクティブ性、モジュール性、拡張性、柔軟なデータ型は、この目標から派生しています。Logoはインタプリタ言語として実装されることが多く、ユーザーに即時フィードバックを提供し、デバッグと学習プロセスを支援します。プログラムは小さな手続きの集まりとして構成され、新しい語彙を既存の語彙で定義していくことで、複雑なプロジェクトを段階的に構築できます。また、数値と文字列の区別を曖昧にするなど、データ型に対する柔軟性も備えています。

全文翻訳

Logoプログラミング

Logoプログラミング言語は、Lispの方言であり、学習ツールとして設計されました。その特徴である対話性、モジュール性、拡張性、データ型の柔軟性は、この目標から導き出されています。

対話性

Logoにはコンパイルするバージョンもいくつか存在しますが、一般的にはインタプリタ型言語として実装されています。このアプローチによる対話性は、ユーザーに個々の命令に対する即時フィードバックを提供し、デバッグと学習プロセスを助けます。エラーメッセージは記述的です。例えば

fowad

fowad という単語は分かりません

(fowad という単語は、Logoの組み込み語であるプリミティブでも、あなたが定義したプロシージャでもありません。)

forward

forward には入力が足りません

(正しくスペルが入力されたので、Logoは forward という単語を認識しましたが、forward は追加情報を必要とするため、あなたの命令を実行できません。)

forward 100

(Logoは満足しています。エラーメッセージはありません。タートルが100ステップ前進します。)

モジュール性と拡張性

Logoプログラムは通常、小さなプロシージャの集まりです。一般的に、プロシージャはテキストエディタで記述して定義されます。特別な単語 to の後にプロシージャ名が続きます。それ以降の行がプロシージャの定義となります。単語 end が定義の終了を示します。

私たちのタートルグラフィックスの例では、正方形を描画するプロシージャを定義しました。

to square
repeat 4 [forward 50 right 90]
end

そして、それを別のプロシージャのサブプロシージャとして使用しました。

to flower
repeat 36 [right 10 square]
end

同様に、flower はより大きなものの構成要素になり得ます。

to garden
repeat 25 [set-random-position flower]
end

いいえ、set-random-position はプリミティブではありませんが、random はプリミティブであり、setposition(または setpos または setxy)もプリミティブです。あるいは、random を使って forward と right で set-random-position を記述することもできます。

一度 Logo プロシージャが定義されると、それは Logo のプリミティブのように機能します。実際、Logo プログラムを見ると、どの単語がプリミティブで、どの単語がユーザー定義であるかを、その特定の Logo 実装を知らなければ区別する方法はありません。私たちの言語のサンプルでは、プロシージャ pick を使用してリストから項目をランダムに選択しました。例えば、プロシージャ who の中でです。

to who
output pick [Sandy Dale Dana Chris]
end

Logo のバージョンによっては pick はプリミティブですが、他のバージョンでは自分で記述する必要があります。どちらの場合でも、Who は同じように見え、機能します。

Logo は、複雑なプロジェクトを小さなステップで構築することを可能にします。Logo でのプログラミングは、既存の単語を使って新しい単語を教えることで、その語彙を増やすことによって行われます。この点で、それは人々が話し言葉を学ぶ方法と似ています。

柔軟性

Logo は単語とリストを扱います。Logo の単語は文字の文字列です。Logo のリストは、単語やリストの順序付けられたコレクションです。数字は単語ですが、算術演算などができるため、特別なものです。

多くのプログラミング言語は、使用しているデータの種類を正確に知ることを要求するため、かなり厳格です。これはコンピュータにとっては簡単になりますが、プログラマーにとっては難しくなります。2つの数字を加算する前に、それらが整数なのか実数なのかを指定する必要があるかもしれません。コンピュータはそのようなことを知る必要があります。しかし、ほとんどの人はこれについて考えないため、Logo がそれを処理します。算術演算を求められると、Logo はそれを実行します。

print 3 + 4
7

print 3 / 4
.75

Logo に慣れていないが、他のプログラミング言語で作業したことがある場合、次のシーケンスは驚くかもしれません。

print word "apple "sauce
applesauce

print word "3 "4
34

print 12 + word "3 "4
46

これは階乗を計算する再帰プロシージャです。

to factorial :number
if :number = 1 [output 1]
output :number * factorial :number - 1
end

print factorial 3
6

print factorial 5
120

これは単語のリストを反転するプロシージャです。

to reverse :stuff
ifelse equal? count :stuff 1
[output first :stuff]
[output sentence reverse butfirst :stuff first :stuff]
end

print reverse [apples and pears]
pears and apples

Brian Harvey の興味深いLogoサンプルもご覧になると良いでしょう。

拡張機能

ここで示した機能は、すべての Logo バージョンに共通しています。一部の Logo 実装には、拡張された言語機能が含まれています。

Macintosh 用には Object Logo というオブジェクト指向 Logo がありました。

MicroWorlds Logo にはマルチタスク機能が含まれており、複数の独立したプロセスを同時に実行できます。同じ機能は、LEGO Logo 製品である Control Lab のソフトウェアにも搭載されています。さらに大規模な並列処理が可能な Logo は StarLogo です。

従来の Logo では、タートルへのコマンド

repeat 9999 [forward 1 right 1]

は実行に時間がかかります。命令

repeat 9999 [forward 1 right 1] print "HELLO

は、タートルが移動を終えた後に単語 HELLO が表示される原因となります。

MicroWorlds Logo では、次のように入力すると

launch [repeat 9999 [forward 1 right 1]] print "HELLO

タートルが動き始めます。最初のプロセスが起動するとすぐに単語 HELLO が表示されます。あるいは

forever [forward 1 right 1] print "HELLO

は、停止するまで継続するプロセスを開始します。ここでも、タートルプロセスが開始されるとすぐに単語 HELLO が表示されます。

さらに知る

Logo プログラミング言語についてさらに知るには、Brian Harvey の3巻構成の力作Computer Science Logo Style や、Michael Friendly のAdvanced Logo をご覧ください。

Logo をお持ちでなく、始めたい場合は、当社のLogoソフトウェアページをご覧ください。または、UCBLogo, MSWLogo, FMSLogo, StarLogo TNG, または StarLogo Nova を今すぐダウンロードすることもできます。

この記事のヒンディー語訳はこちらで入手できます。

この記事のウクライナ語訳はこちらで入手できます。
この記事のセルボクロアチア語訳はこちらで入手できます。