import random, algorithm
    
    # a < b ==> cmp(a, b) < 0
    proc cmp(a, b: int): int =
      (a > b).int - (a < b).int
    
    proc quicksort(a: var openarray[int]; left, right: int; cp: proc (a, b: 
int): int) =
      proc qsort(left, right: int) =
        var l, r, p: int
        let len = right - left
        let len2 = len div 2
        if true: # insertion sort on tiny array
          for i in left + 1 .. right:
            for j in countdown(i, left + 1):
              if cp(a[j], a[j - 1]) >= 0: break # this is the line with error
              swap(a[j], a[j - 1])
          return
      qsort(a.low, a.high)
    
    var
      x: array[2e6.int, int]
    
    quicksort(x, x.low, x.high, cmp)
    
    
    
    e.nim(15, 17) Error: illegal capture 'a

I tried writing it in this way because recursively passing the cmp proc makes 
sorting a bit slower. I tried pragmas procvar and closure, but that seems to 
make no difference.

Reply via email to