見出し画像

2024-04-05 ロゴ

●LEAF 1061 ロゴ

カンブリアンゲーム(ニューイヤーカンブリアン2024)

LOGO(ロゴ)は、教育向けとして設計されたマルチパラダイムコンピュータプログラミング言語である。しばしば簡易言語だと誤解されていることもあるが、再帰なども扱える言語としての機能、リストなどのデータ構造や、I/O・ファイルなどの一般的な機能を持ったライブラリなど、簡易言語ではなく、十分な能力を持ったプログラミング言語である。特徴的な機能としては「タートルグラフィック」がある。

1967年教育(特に構成主義学習)のために開発された。名称はギリシャ語の logos (言葉)に由来する。当時代表的な既存言語であったFORTRANや、その影響を受けた言語がもっぱら数値計算を指向したものであったのに対し、「言葉」で操作する言語であるといったようなことを強調したものである。コンピュータの使用を通じた児童の思考能力の訓練を目的としており、主に8歳から12歳の児童にも扱い易いよう配慮された豊富なグラフィック関連のコマンドが特徴である。主な使用者は学生、教師が想定された。目標は子どもが単語や文で遊べる数学の遊び場を作ることだった。LOGOの設計では、ハードルが低く使いやすいことと、エラーの原因がわかりやすいことが重視されている。タートル(亀)を採用したのは、視覚的フィードバックが即座に得られ、デバッグを即座に行えるからだった。

1980年代初頭から中ごろにかけて、Apple II用の Apple LogoTI-99/4A用の TI Logo が発売され、初心者のプログラミング入門に最適と宣伝された。このころ欧米の小学校での教育によく使われ、LOGOの最盛期だったといえる。Apple Logo を開発したのはLCSIで、これ (LCSI Logo) が初期のLOGO実装として広く普及した。

ソニー1983年に発売したパーソナルコンピュータSMC-777 には LOGO言語環境(DR LOGO)が標準でサポートされていた。

SMC-777 でが、CP/M環境下のソフトウェアとしてFORTRANCOBOLCPascalAPLForthPrologLISPがソニー扱いで発売され、幅広いプログラミング言語学習用のパソコンとしての活用も検討されていたものと思われる。またこの時期に国内外で隆盛していたテクノミュージックブームを意識して、原始的ではあるものの内蔵PSG音源を使用したDTMソフトウェア(カミヤスタジオのラッサピアター)をいち早く同梱していた。発売元が家電・AV機器メーカーでもあるため、一般家庭向け製品と同種の販売戦略を展開、当時人気絶頂にあったアイドル松田聖子をイメージキャラクターに採用して、「人々のHitBit」というCMキャッチとともにパソコンに関心の無い層へのアピールを盛んに行っていた。

OH! HIT BIT
聖子のLOGO入門


Microsoft Windows 向けに拡張したMSWLogo英語版は複数のタートルを扱え、3Dグラフィックスを描画できる。またウィンドウインタフェースもサポートしており、GUIを通したI/Oも可能で、キーボードやマウスからのイベントを扱える。

Windows11で、MSWLogoが動くか試してみました。


WEB上でLOGOが試せる「Online Logo」というサイトがあります。

MSWLogoと同じプログラムを試してみました。


日本で開発されたLOGOもある。ドリトル (Dolittle) は、 ロゴ言語実行環境「ロゴ坊」を拡張したもの。厳密にはLogo言語から派生したオリジナル言語を用いる。

ロゴ坊(日本語対応Logo言語)

ロゴ坊(マニュアル)

PC-9801で遊んだロゴ坊は、Win11で今も動きます。テキスト画面とグラフィック画面が同じ画面というのが98っぽくて素敵。

ロゴ坊のタートルグラフィックをいくつか試してみました。今でも遊べる。640*400の遊園地。

test_1
test_2
test_4
test_5
to test_1
make "i 1
repeat 1000  [fd :i rt 90 make  "i (:i + 1)] 
end

to test_2
make "i 1
setc red
repeat 450 [make "a 73 * sin :i fd :a rt 88 * cos :a make  "i (:i + 1) ] 
end

to test_3
cg
make "i 1
repeat 450 [setc (random 6) + 1 make "a 73 * sin :i fd :a rt 88 * cos :a make  "i (:i + 1) ] 
end

to test_4
cg
make "i 1
bk 5 setc yellow
repeat 420 [seth :i repeat :i [fd 2 rt 1] pu home bk 5 pd make  "i (:i + 1)] 
end

to test_5
cg
make "j 1
while [:j < 15][
  make "i 1 make "n random 4 + 1
  setc :n
  repeat 720 [fd power  :n 2  :i rt :i make  "i (:i + 1)] lt 45] 
  make  "j (:j + 5)
]
end

ロゴ坊にはMMLを演奏できる音楽機能があるのですが、Win11では音が出ませんでした。マイクロソフトはWindowsにMIDI機能が必要ないと考えたのか音源の著作権の問題があったのか、MIDI機能はWIndowsのバージョンが上がる度に迷走を続けたのでした。


ドリトル (Dolittle) は、 「ロゴ坊」を大幅に拡張したロゴ言語実行環境です。

音楽機能も充実しており、MIDIポートを指定することで外部音源(シンセサイザーなど)を演奏させることができます。

2012年に「音楽プログラミング講座 - ドリトルによる実験音楽入門 -」というスライドを作ってみました。

こちらは、2017年に試したドリトルで絵と音を同期させる実験です。

// カメ太音頭(テクノバージョン)
map=[|v s1 e1 s2 e2| s2+(e2-s2)*((v-s1)/(e1-s1))].
slc=[|slc; ary| ary=slc ! "," split. ary! (random(ary! size?)) get].
w=screen!width?. h=screen!height?.
sz=120. xn=ceil(w/sz). yn=ceil(h/sz). ws=sz. hs=sz.
kameta=array! create.
i=0. j=0.
[i=i+1.
 [j=j+1.
  x=!(j)(1)(xn+1)(w/-2)(w/2) map. y=!(i)(1)(yn+1)(h/2)(h/-2) map.
  odoriko=! ("ayumi.png,ayumiRed.png") slc.
  kameta! (turtle! create (odoriko) setshape penup (x+sz/2)(y-sz/2) position (1+random(10)/10) scale hide) add.
 ]! (xn) repeat.
 j=0.
]! (yn) repeat.

i1=instrument! (39) create (50) velocity.
i2=instrument! (30) create (40) velocity.

t1=timer! create (1) interval (60) times [
 [|i|
  (kameta! (i) get)! (45) rightturn show
 ]! (xn*yn) repeat.
 m1="__". [m1=m1+(! "d.e.a,f.g.a" slc)+"2"]! (2) repeat.
 m2="". [m2=m2+(! "a,c,b,c,e,d,b,c" slc)+"4"]! (4) repeat.
 t1=melody! create (i1) set (m1) add.
 t2=melody! create (i2) set (m2) add.
 t10=drumSet! create (100) velocity "ど4つ8つ8ど4つ8つ8" add.
 band! create (120) tempo (t1)(t2)(t10) add play.
] execute.


// カメ太音頭(お囃子バージョン)
screen! (color! 0xe6b422 create) paint.
map=[|v s1 e1 s2 e2| s2+(e2-s2)*((v-s1)/(e1-s1))].
slc=[|slc; ary| ary=slc ! "," split. ary! (random(ary! size?)) get].
w=screen!width?. h=screen!height?.

踊手スタンバイ=[
sz=120. xn=ceil(w/sz). yn=ceil(h/sz). ws=sz. hs=sz.
kameta=array! create.
i=0. j=0.
[i=i+1.
 [j=j+1.
  x=!(j)(1)(xn+1)(w/-2)(w/2) map. y=!(i)(1)(yn+1)(h/2)(h/-2) map.
  odoriko=! ("ayumi.png,ayumiRed.png") slc.
  kameta! (turtle! create (odoriko) setshape penup (x+sz/2)(y-sz/2) position (1+random(15)/10) scale hide) add.
 ]! (xn) repeat.
 j=0.
]! (yn) repeat.
].

囃手スタンバイ=[
i1=instrument! (73) create (50) velocity. i2=instrument! (73) create (50) velocity.
drumSet! "どつ" (64)(80) instrument.
p1="^^f4.e8d2__,^^f4.e8d2__,^^f4.e8d4f4__,^^e4.d8e2__". p2="".
p10="ど4つ8つ8ど4つ8つ8".
].

ダンススタート=[
t1=timer! create (1) interval (60) times [
 [|i|
tn=! "30,45,60,90" slc.
  (kameta! (i) get)! (tn) rightturn front show
 ]! (xn*yn) repeat.
 m1="". [m1=m1+(! (p1) slc)]! (2) repeat.  m2="". [m2=m2+(! (p2) slc)]! (4) repeat.
 t1=melody! create (i1) set (m1) add.  t2=melody! create (i2) set (m2) add.
 t10=drumSet! create (100) velocity (p10) add.
 band! create (120) tempo (t1)(t2)(t10) add play.
] execute.
].

! 踊手スタンバイ.
! 囃手スタンバイ.
! ダンススタート.


この記事が気に入ったらサポートをしてみませんか?