変数って何様?プログラミング言語に馴染みの有る方は、ここは飛ばして下さっても構いません。 変数って何でもアリ?Logoに言わせれば、何でもありです。 number? :orange オレンジは数値か? Result: FALSE ちがいます。 word? :orange オレンジはワードか? Result: TRUE そうです。 list? :orange オレンジはリストか? Result: FALSE ちがいます。 まだ、他にも調べる命令がありますけど、こんな感じで判るでしょうか。 大域変数と局所変数(グローバルとローカル)to A1 make "GLOBAL 100 print sentence "A1.GLOBAL :GLOBAL A2 A3 print sentence "A1.GLOBAL :GLOBAL end to A2 make "GLOBAL :GLOBAL + 100 print sentence "A2.GLOBAL :GLOBAL end to A3 print sentence "A3.GLOBAL :GLOBAL end いきなりサンプルプログラムで申し訳ない。 A1 A1.GLOBAL 100 A2.GLOBAL 200 A3.GLOBAL 200 A1.GLOBAL 200 この事から何が判るでしょう。そうです、単にmakeで定義された変数は、どの手続きからでも値を参照したり変更したり出来ます。 to A1 make "GLOBAL 100 print sentence "A1.GLOBAL :GLOBAL A2 :GLOBAL A3 :GLOBAL print sentence "A1.GLOBAL :GLOBAL end to A2 :GLOBAL make "GLOBAL :GLOBAL + 100 print sentence "A2.GLOBAL :GLOBAL end to A3 :GLOBAL print sentence "A3.GLOBAL :GLOBAL end A1 A1.GLOBAL 100 A2.GLOBAL 200 A3.GLOBAL 100 A1.GLOBAL 100 今度は、手続きA2,A3を呼び出す時に引数を付加しています。手続きA2だけで変数GLOBALの値が変わっています。 to B1 make "GLOBAL 100 print sentence "B1.GLOBAL :GLOBAL B2 print sentence "B1.GLOBAL :GLOBAL end to B2 local "GLOBAL make "GLOBAL "Hello\ World print sentence "B2.GLOBAL :GLOBAL end B1 B1.GLOBAL 100 B2.GLOBAL HELLO WORLD B1.GLOBAL 100 手続きB2では、変数名GLOBALをローカル宣言しました。そしてそれに、文字列を代入しています。 to B1 local "GLOBAL make "GLOBAL 100 print sentence "B1.GLOBAL :GLOBAL B2 B3 print sentence "B1.GLOBAL :GLOBAL end to B2 make "GLOBAL "Hello\ World print sentence "B2.GLOBAL :GLOBAL end to B3 local "GLOBAL make "GLOBAL 200 print sentence "B3.GLOBAL :GLOBAL end B1 B1.GLOBAL 100 B2.GLOBAL HELLO WORLD B3.GLOBAL 200 B1.GLOBAL HELLO WORLD ありゃりゃ、おかしな結果になりました。 B2 B2.GLOBAL HELLO WORLD print :global HELLO WORLD make "global "good\ bye print :global GOOD BYE B1 B1.GLOBAL 100 B2.GLOBAL HELLO WORLD B3.GLOBAL 200 B1.GLOBAL HELLO WORLD print :global GOOD BYE 今度は、B2だけ実行してみました。その後、変数GLOBALを参照してみるとHELLO
WORLDが入っています。 to C1 local "LOCAL make "LOCAL 100 print sentence "C1.LOCAL :LOCAL C2 print sentence "C1.LOCAL :LOCAL end to C2 print sentence "C2.LOCAL :LOCAL + 100 C3 end to C3 print sentence "C3.LOCAL :LOCAL + 200 end C1 C1.LOCAL 100 C2.LOCAL 200 C3.LOCAL 300 C1.LOCAL 100 手続きC2,C3では、変数を宣言していません。でも、C1から呼び出しているので同名の変数は上位の変数を、参照するダイナミック・スコープ機能が働くので、ちゃんとC1のローカル変数を参照する事が可能です。 C2 :LOCAL is not a name at: C2 line: PRINT SENTENCE "C2.LOCAL :LOCAL + 100 エラーになりました。LOCALって名前は知らないって言ってます。:-) |