1

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 でできることはありますか?

4

1 に答える 1

3

スキームでは、代わりにtype Set = Int => Boolean何も書く必要はありません: . Scala がこれを必要とする唯一の理由は、引数と戻り値の型を記述することですが、Scheme ではどちらも行うことができません。ただし、Typed Racketがあり、Racket に静的型を追加し、どこに書き込むかを指定します。

(define-type Set (Integer -> Boolean))
于 2013-09-28T13:15:03.877 に答える