LISPPA: Euler algorithm (paxBasic).


Function Cycle(InitV, A)
  Dim  P, Stack, U, V, result
  result = NULL
  Stack = [InitV, NULL]
  Do Until Stack = NULL
    V = Stack(0)
    P = AddressOf A(V)
    If P <> NULL Then
      U = P(0)
      Reduced P = P(1)
      Stack = [U, Stack]
      P = AddressOf A(U)
      Do Until P = NULL
        If P(0) = V Then
          Reduced P = P(1)
          Exit Do
        End If
        P = AddressOf P(1)
      Loop
    Else
      Reduced Stack = Stack(1)
      result = [V, result]
    End If
  Loop
  Return result
End Function

Dim A[10], Path, P

A[1] = [2, [3, NULL]]
A[2] = [1, [3, [7, [8, NULL]]]]
A[3] = [1, [2, [4, [5, NULL]]]]
A[4] = [3, [5, NULL]]
A[5] = [3, [4, [6, [8, NULL]]]]
A[6] = [5, [7, [8, [9, NULL]]]]
A[7] = [2, [6, [8, [9, NULL]]]]
A[8] = [2, [5, [6, [7, NULL]]]]
A[9] = [6, [7, NULL]]

Path = Cycle(1, A)

println "Euler path: "
P = AddressOf Path
Do Until P = NULL
  println P(0)
  P = AddressOf P(1)
Loop


Copyright © 1999-2006 VIRT Laboratory. All rights reserved.