Scalaではtype Set = Int => Boolean
、Schemeでそれをどのように模倣できますか?
たとえば、Scala では、
def singletonSet(elem: Int): Set = (x: Int) => (x == elem)
def union(x: Set, y: Set): Set = (z: Int) => (x(z) || y(z))
def forall(s: Set, p: Int => Boolean): Boolean = {
def iter(a: Int): Boolean = {
if (a > bound) true
else if (s(a) && !p(a)) false
else iter(a + 1)
}
iter(-bound)
}
スキームでは、これは私がこれまでに持っているものです:
(define (singletonSet elem) (lambda (x) (= x elem)))
(define (union x y) (lambda (z) (or (x z) (y z))))
(define bound 1000)
(define -bound 1000)
(define (forall s p)
(local ((define (iter a)
(cond
[(> a bound) true]
[(and (s a) (not (p a))) false]
[else (iter (+ a 1))])))
(iter -bound)))
(forall v (lambda (x) (= (modulo x 3) 0)))
type Set = Int => Boolean
では、Scheme/Racket でできることはありますか?