callback

追記 : MacOSでは.sでもプリプロセスされるらしい。何故。。? - https://bugs.launchpad.net/ikarus/+bug/179878/comments/11

okuoku@okupcb ~/mosh/mosh.cygwin
$ cat qsort.scm
(import
 (mosh)
 (mosh ffi)
 (rnrs))

(define array (u8-list->bytevector '(6 5 3 4 1 7 2)))

(let* ([libc (open-shared-library "cygwin1.dll")]
       [qsort (c-function libc void qsort void* int int callback)]
       [compare (c-callback int (void* void*) (lambda (x y) (if (> (pointer-ref-c-uint8 (integer->pointer x) 0)
                                                                   (pointer-ref-c-uint8 (integer->pointer y) 0)) 1 0)))])
    (qsort array (bytevector-length array) 1 compare)
    (display array))
okuoku@okupcb ~/mosh/mosh.cygwin
$ ./mosh qsort.scm
GC Warning: Repeated allocation of very large block (appr. size 376832):
        May lead to memory leak and poor performance.
#vu8(4 3 1 2 5 6 7)
  1. 拡張子がおかしい。.s(小文字)はプリプロセスされたファイルに使う。.S(大文字)が正しい。
  2. CygwinWindowsもシンボルの先頭に明示的なアンダースコアを要求する。