Diamond Pattern

to line :x1 :y1 :x2 :y2
    penup
    setxy sentence :x1 :y1
    pendown
    setxy sentence :x2 :y2
end
         
to DiamondPattern :radius [:elements 20] 1
    (local
    "po.x
    "po.y
    "rpos
    "addrpos
    )
         
    make "po.x array :elements
    make "po.y array :elements
    make "rpos 0
    make "addrpos (/ 360 :elements)
         
    for "i 0 (- :elements 1) [
      aset :po.x :i (* :radius cos :rpos)
      aset :po.y :i (* :radius sin :rpos)
      make "rpos (+ :rpos :addrpos)
    ]
         
    for "i 0 (- :elements 1) [
      for "j 0 (- :elements 1) [
      line (aget :po.x :i) (aget :po.y :i) (aget :po.x :j) (aget :po.y :j)
      ]
    ]
end
DiamondPattern 100
(DiamondPattern 100 8)

 配列を使った簡単なサンプルです。
最初の for ループで、半径 radius で求められた座標を計算して、配列に入れています。
円を多角形で近似する方法と、同一ですね。
そして、次の二重 for ループで座標同士を線で繋いでいます。
ひとつの座標から、他の座標の全てにと言う事ですね。
line (aget :po.x :i) (aget :po.y :i) (aget :po.x :j) (aget :po.y :j)
この部分の、括弧は特に必要ではありませんがプログラムの見やすさを考えて、あえて括弧を付けています。

 他言語が、配列要素自体を記述すれば参照できるのに対してLogo言語は、配列操作用の手続きが有ります。
ちょっと面倒くさいですね。:-(
aset が、配列要素への代入。aget が、配列要素の取出しです。