再帰的なプログラミング技法の例としてヒルベルト曲線を例示します。
Public Sub Proc11() 'Hilbert
Const isize = 400
Dim ict, lenn, IX, iy, id
Select Case Ivar
Case 1: ict = 3
Case 2: ict = 4
Case 3: ict = 5
Case 4: ict = 6
Case Else: ict = 3
End Select
Dperas: Dpwind 0, 0, 640
lenn = isize / (2 ^ ict)
IX = (isize / 2) - isize / (2 ^ (ict + 1))
iy = -(isize / 2) + isize / (2 ^ (ict + 1))
id = 270 : drawA ict - 1, IX, iy, id, lenn
End Sub
Private Sub drawA(ict, IX, iy, ByVal id, lenn)
If ict $lt; 0 Then Exit Sub
id = id - 90: drawB ict - 1, IX, iy, id, lenn: drawLine IX, iy, id, lenn
id = id + 90: drawA ict - 1, IX, iy, id, lenn: drawLine IX, iy, id, lenn
drawA ict - 1, IX, iy, id, lenn: id = id + 90: drawLine IX, iy, id, lenn
drawB ict - 1, IX, iy, id, lenn: id = id - 90
End Sub
Private Sub drawB(ict, IX, iy, ByVal id, lenn)
If ict $lt; 0 Then Exit Sub
id = id + 90: drawA ict - 1, IX, iy, id, lenn: drawLine IX, iy, id, lenn
id = id - 90: drawB ict - 1, IX, iy, id, lenn: drawLine IX, iy, id, lenn
drawB ict - 1, IX, iy, id, lenn: id = id - 90: drawLine IX, iy, id, lenn
drawA ict - 1, IX, iy, id, lenn: id = id + 90
End Sub
Private Sub drawLine(IX, iy, id, lenn)
Dim ioldx, ioldy
If id < 0 Then id = id + 360
If id >= 360 Then id = id - 360
ioldx = IX: ioldy = iy
Select Case id
Case 0: IX = IX + lenn
Case 90: iy = iy - lenn
Case 180: IX = IX - lenn
Case 270: iy = iy + lenn
End Select
Dpmove (ioldx), (ioldy): Dpdraw (IX), (iy)
End Sub