ML Code | Scheme Code |
---|---|
fun factorial(n) = if n = 0 then 1 else n * factorial(n - 1); |
(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1))))) |
fun range(low, high) = if low > high then [] else low::range(low + 1, high); |
(define (range low high) (if (> low high) () (cons low (range (+ low 1) high)))) |
fun pairOff([]) = [] | pairOff([x]) = [[x]] | pairOff(x::y::rest) = [x, y]::pairOff(rest); |
(define (pair-off lst) (cond ((null? lst) ()) ((= (length lst) 1) (list lst)) (else (cons (list (car lst) (cadr lst)) (pair-off (cddr lst)))))) |
fun map(f, []) = [] | map(f, x::xs) = f(x)::map(f, xs); |
(define (mapp f lst) (if (null? lst) () (cons (f (car lst)) (mapp f (cdr lst))))) |
fun filter(f, []) = [] | filter(f, x::xs) = if f(x) then x::filter(f, xs) else filter(f, xs); |
(define (filterr f lst) (cond ((null? lst) ()) ((f (car lst)) (cons (car lst) (filterr f (cdr lst)))) (else (filterr f (cdr lst))))) |
fun factorial2(n) = if n < 2 then 1 else reduce(op *, range(2, n)); |
(define (factorial2 n) (foldl * 1 (range 2 n))) |
fun f(x, lst1, lst2, lst3) = member(x, lst1) orelse (member(x, lst2) andalso not(member(x, lst3))); |
(define (f x lst1 lst2 lst3) (and (member x lst1) (or (member x lst2) (not (member x lst3))))) |
fun sumLengths([]) = 0 | sumLengths(x::xs) = length(x) + sumLengths(xs); |
(define (sumLengths lst) (if (null? lst) 0 (+ (length (car lst)) (sumLengths (cdr lst))))) |
fun sumLengths2([]) = 0 | sumLengths2(lst) = reduce(op +, map(length, lst)); |
(define (sumLengths2 lst) (foldl + 0 (map length lst))) |
val evens = map(fn x => 2 * x, range(1, 10)); |
(define evens (map (lambda (x) (* 2 x)) (range 1 10))) |
val numbers = range(1, 5) @ range(1, 10) @ range(3, 8); |
(define numbers (append (range 1 5) (range 1 10) (range 3 8))) |