summaryrefslogtreecommitdiffstats
path: root/utils.scm
blob: a7f7b17fa3449cc80cefb41091752836c2e4337f (plain)
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
41
42
43
44
45
46
47
48
(module utils *
  (import scheme
	  (chicken base)
	  (chicken irregex)
	  matchable)

  (define-syntax λ
    (syntax-rules ()
      ((_ expr ...)
       (lambda expr ...))))

  (define-syntax @
    (syntax-rules ()
      ((_ fn-body expr ...)
       (lambda (x) (fn-body expr ... x)))))

  (define (last lst)
    (if (null? (cdr lst))
	(car lst)
	(last (cdr lst))))

  (define (pipe x . fns)
    (match fns
      [() x]
      [(fn . rest) (apply pipe (fn x) rest)]))

  (define (flow . fns)
    (lambda (x) (apply pipe x fns)))

  (define (replace irx replacement in)
    (irregex-replace irx in replacement))

  (define (replace-all irx replacement in)
    (irregex-replace/all irx in replacement))

  (define (submatch m #!optional (index 1))
    (irregex-match-substring m index))

  (define (assocar key alist)
    (match (assoc key alist)
      [#f #f]
      [pair (car pair)]))

  (define (assocdr key alist)
    (match (assoc key alist)
      [#f #f]
      [pair (cdr pair)]))
  )