2013-09-28 2 views
1

В Scala у меня есть это type Set = Int => Boolean как я/я могу имитировать это на схеме?Как преобразовать этот код Scala в схему?

Например, в 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 в Схеме/Ракетке?

ответ

3

На схеме вместо type Set = Int => Boolean ничего не нужно писать: . Единственная причина, по которой Scala нуждается в написании аргументов и возвращаемых типов, ни о которых вы не можете сделать в Scheme. Тем не менее, есть Typed Racket, который добавляет статические типы в Racket и где вы будете писать

(define-type Set (Integer -> Boolean)) 
Смежные вопросы