File: reverse.nim

package info (click to toggle)
storm-lang 0.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,028 kB
  • sloc: ansic: 261,471; cpp: 140,432; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (40 lines) | stat: -rw-r--r-- 727 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import times, os

type
    Cons = ref object
       value: int
       next: Cons

proc cons(value: int, next: Cons): Cons =
    new(result)
    result.value = value
    result.next = next

proc create(len: int): Cons =
    if len > 0:
        result = cons(len, create(len - 1))
    else:
        result = nil

proc append(a, b: Cons): Cons =
    if a == nil:
        result = b
    else:
        result = cons(a.value, append(a.next, b))

proc reverse(a: Cons): Cons =
    if a == nil:
        result = nil
    else:
        result = append(reverse(a.next), cons(a.value, nil))

proc test() =
    let time = cpuTime()

    var v = reverse(create(3000))

    echo "Total time: ", cpuTime() - time


for i in 1..100:
    test()