Sample0

to square :size
    repeat 4  [forward :size right 90]
end
         
to sample0 :size
    repeat 4 [square :size right 90]
    left 45
    repeat 4 [square :size * 0.7 right 90]
end     

 上記の2つのプログラをFileメニューから、New Editor Windowを選択してからタイプするか、このページからコピー&ペーストしよう。
次にEditメニューからDefineを選択すれば準備完了である。
Listenerウィンドウで、sample 100とタイプしてリターンキーでプログラムが実行されます。



 右の絵が描けたはずである。
どうしてこんな図形が、描けたのであろうか。
repeat 4 [square :size right 90]
square
を、4回呼び出しているから同じ所を、ぐるぐる回ると勘違いしそうですね。
しかしsquareを、呼び出した後に、更に90度右に方向を変えていますから、同じ所は回りません。
そして、4つ四角形を描いたら左に45度方向を変えて、少し小さい四角形を4回描きます。
おや、:size0.7を掛算していますね。*この記号は、掛算の命令だったんですね。
100に0.7を掛けると当然70になります。タートルは70歩の大きさで四角形を描いてくれました。

Sample1


                 
         
         
                  
to sample1 :size
    repeat 180 [square :size right 2]
end

 


Sample0
より簡単な図形です。
四角形を、2度づつ傾けながら180回描いているだけです。
なぜ180回繰り返させたか判りますね。
判らなかったら、180を他の回数に変更してみましょう。



Sample2

to random.color15
    setpc random 15
end
         
to square_side23draw :size
    penup
    forward :size
    right 90
    pendown
    forward :size
    right 90
    forward :size
    right 90
    penup
    forward :size
    right 90
    pendown
end
       
to square_side23 :size
    repeat 180 [random.color15 square_side23draw :size right 2]
end
         
to sample2 :size
    square_side23 :size
end





 Sample2は、単にsquare_side23を呼び出しているだけです。
そして、square_side23は、random.color15square_side23drawを、呼び出しているにすぎません。
Sample1のまん中の線を、描いていないだけですね。

square_side23drawは、描き始めの最初の辺と最後の辺を、描かない様にpenuppendownを使っています。
線の色変更は、random命令を使い適当にやってみました。



Sample3

to square_side12draw :size
    pendown
    forward :size
    right 90
    forward :size
    right 90
    penup
    forward :size
    right 90
    forward :size
    right 90
    pendown
end
         
to square_side2draw :size
    local "angle
    if (0 < :size) then make "angle [right 90] else make "angle [left 90]
    penup
    forward :size
    run :angle
    pendown
    forward :size
    run :angle
    penup
    forward :size
    run :angle
    forward :size
    run :angle
    pendown
end
         
to square_side12 :size
    repeat 180 [random.color15 square_side12draw :size right 2]
end
         
to square_side02 :size
    repeat 180 [random.color15 square_side2draw :size right 2]
end
 
to msgn :num
    output * -1 :num
end
         
to sample3 :size :repetition
    local "reduce
    name 0.65 "reduce
         
    if :repetition <= 1 [
      square_side12 :size 
      square_side02 msgn :size
    ] [ 
      square_side02 :size
      square_side02 msgn :size
      sample3 * :size :reduce (- :repetition 1)
    ]
end

 どうしましょう。いちいち1行づつ説明していたら1冊の本が、書けそうですね。:-D
Sample2を数回描いたみたいな図形です。
Sample3は、sample3 100 4 とタイプして実行しています。
if文の] [ の後の3行の命令が、この図形の肝腎な部分です。
そして、sample3 * :size :reduce (- :repetition 1)と、自分自身を小さくして更に、繰り返す回数を徐々に減らしながら呼び出しています。
この方法は、よく使われるので今のうちに慣れておきましょう。
それと、数値の計算方法もSample0と比べると、ちょっと違います。
ポーランド記法と、言われている計算方法です。

:repetitionが1か、それ以下になったら真ん中の図形を描いてプログラムは終了します。
実際に、線を引くプログラム(正確には四角形の1部を描く)は、線の引き方を工夫しているだけで、大した事をしている分けではありません。
msgnのプログラムは、何をしているか、すぐに判ったでしょう。
そう、与えらた数値の符号を反転して、その結果をもどす関数になっています。
なぜマイナス値を四角形を描くプログラムに与えるかは、1行づつ追って行けば、どうなるかは、目で見てすぐに判りますね。


Sample4

to square_side2thirdsdraw :size
    local "angle
    if (0 < :size) then make "angle [right 90] else make "angle [left 90]
    penup
    forward :size
    run :angle
    forward / :size 3
    forward / :size 3
    pendown
    forward / :size 3
    run :angle
    penup
    forward :size
    run :angle
    forward :size
    run :angle
    pendown
end
         
to square_side02thirds60 :size
    repeat 60 [square_side2thirdsdraw :size right 6]
end
         
to sample4.sub1 :size :loop
    if ((remainder :loop  2) = 0) [
      square_side02thirds60 :size
    ] [
      square_side02thirds60 msgn :size
    ]
end
         
         
to sample4 :size :repetition
    local "reduce
    name 0.847 "reduce
         
    for "loop 1 :repetition [
      sample4.sub1 :size :loop
      make "size (* :size :reduce)
    ]
end



 sample4 100 8 とタイプして実行しました。
今度は、 for文で決められた回数だけ線分を描いています。
sample4.sub1remainder関数で、奇数回の時に逆向きの線分を描いているのが、判りますね。
定数reduce0.847は、プログラムを試しながら適当に、当りをつけたので、きちんと線と線が接していません。
でも、結構美しいパターンになりました。
もっと真面目に、やった方が良いのですが元来テキトーな性格なのでやりません。
みなさんは、真面目に作ってみて下さい。B-D

 これくらいの図形なら、出来上がりが頭の中で想像できるのですが、プログラムが複雑になってくると、実行するまで判らない事も多々あります。
それも、ひとつの楽しみですね。