Advertisement
triclops200

stdlibForScheme

Jan 9th, 2013
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.43 KB | None | 0 0
  1. (define fact
  2.   (lambda (n)
  3.     (fact_h n 1)))
  4.  
  5. (define fact_h
  6.   (lambda (n m)
  7.     (if (<= n 0)
  8.     m
  9.     (fact_h (- n 1) (* m n)))))
  10.  
  11. (define fold
  12.   (lambda xs
  13.     (if (= (length xs) 2)
  14.     (fold_h (car xs) (car (car (cdr xs))) (cdr (car (cdr xs))))
  15.     (apply fold_h xs))))
  16. (define fold_h
  17.   (lambda (f x xs)
  18.     (if (= (length xs) 0)
  19.     x
  20.     (fold_h f (f x (car xs)) (cdr xs)))))
  21. (define range
  22.   (lambda (n m)
  23.     (if (<= n m)
  24.     (range_h n (- m 1) '())
  25.     (reverse (range_h (+ m 1) n '())))))
  26.  
  27. (define range_h
  28.   (lambda (n m xs)
  29.     (if (= n m)
  30.     (cons m xs)
  31.     (range_h n (- m 1) (cons m xs)))))
  32.  
  33. (define map-reduce
  34.   (lambda (f b xs)
  35.     (fold b (map f xs))))
  36.  
  37. (define map-fold map-reduce)
  38. (define reduce fold)
  39.  
  40. (define fib_h
  41.   (lambda (a b n)
  42.     (if (<= n 1)
  43.     b
  44.     (fib_h b (+ a b) (- n 1)))))
  45.  
  46. (define fib
  47.   (lambda (n)
  48.     (fib_h 0 1 n)))
  49.  
  50. (define ntos
  51.   (lambda args
  52.     (cond
  53.      ((= (length args) 1)
  54.       (string-append (number->string (car args)) " "))
  55.      ((= (length args) 2)
  56.       (string-append (number->string (car args)) (car (cdr args)))))))
  57.  
  58. (define Y
  59.   (lambda (f)
  60.     ((lambda (x) (x x))
  61.      (lambda (g)
  62.        (f (lambda args (apply (g g) args)))))))
  63.  
  64. (define s-app-gen (lambda (n) (lambda (x v) (string-append x n v))))
  65.  
  66. (define != (lambda (a b) (not (= a b))))
  67.  
  68. (define readline
  69.   (lambda ()
  70.     (readline_h "") ))
  71.  
  72. (define readline_h
  73.   (lambda(n)
  74.     (let ((ch (read-char)))
  75.       (cond
  76.        ((eof-object? ch) n)
  77.        (#t  
  78.     (let ((c (string ch)))
  79.       (cond
  80.        (
  81.         (or (string=? c "\n") (string=? c "\r"))
  82.         n
  83.         )  
  84.        (#t
  85.         (readline_h (string-append n c))))))))))
  86.  
  87. (define join
  88.   (lambda (f xs ch)
  89.     (map-reduce f (s-app-gen ch) xs)))
  90.  
  91. (define contains?
  92.   (lambda (x xs)
  93.     (if (null? xs)
  94.     #f
  95.     (if (eq? x (car xs))
  96.         #t
  97.         (contains? x (cdr xs))))))
  98.  
  99. (define in? contains?)
  100.  
  101. (define uniqueify
  102.   (lambda (xso)
  103.     (let loop ((ys '()) (xs xso))
  104.       (if (null? xs)
  105.       ys
  106.       (if (contains? (car xs) ys)
  107.           (loop ys (cdr xs))
  108.           (loop (cons (car xs) ys) (cdr xs)))))))
  109.  
  110. (define (isqrt n)
  111.   (if (= n 1)
  112.       1
  113.       (let ((xn (isqrt (- n 1))))
  114.     (quotient (+ xn (quotient n xn)) 2))))
  115.  
  116. (define factors
  117.   (lambda (nn)
  118.     (let ((n (+ 1 (isqrt nn))))
  119.       (let loop ((xs '()) (m 1))
  120.     (if (>= m n)
  121.         (uniqueify xs)
  122.         (if (= (modulo nn m) 0)
  123.         (loop (cons (quotient nn m) (cons m xs)) (+ m 1))
  124.         (loop xs (+ m 1))))))))
  125. (define repeat
  126.   (lambda (n m)
  127.     (let loop ((x m) (xs '()))
  128.       (if (= x 0)
  129.       xs
  130.       (loop (- x 1) (cons n xs))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement