44 lines
898 B
Scheme
44 lines
898 B
Scheme
(library
|
|
(utils)
|
|
(export inc!
|
|
dec!
|
|
swap!
|
|
slurp-file
|
|
chomp)
|
|
(import (chezscheme)
|
|
(only (srfi s1 lists) drop-while))
|
|
|
|
(define-syntax inc!
|
|
(syntax-rules ()
|
|
((_ v) (set! v (+ 1 v)))
|
|
((_ v n) (set! v (+ n v)))))
|
|
|
|
(define-syntax dec!
|
|
(syntax-rules ()
|
|
((_ v) (set! v (- v 1)))
|
|
((_ v n) (set! v (- v n)))))
|
|
|
|
(define-syntax swap!
|
|
(syntax-rules ()
|
|
((_ x y)
|
|
(let ((tmp x))
|
|
(set! x y)
|
|
(set! y tmp)))))
|
|
|
|
(define (slurp-file path)
|
|
(define (slurp)
|
|
(let ((output (get-string-all (current-input-port))))
|
|
(if (eof-object? output)
|
|
output
|
|
(chomp output))))
|
|
|
|
(with-input-from-file path slurp))
|
|
|
|
(define (chomp line)
|
|
(list->string
|
|
(reverse
|
|
(drop-while char-whitespace?
|
|
(reverse (string->list line))))))
|
|
|
|
)
|