0

こんにちは、私は Scala とプログラミング全般に不慣れです。私は coursera で Scala コースを受講しました。割り当ての 1 つは、セットをパラメーターとして取り、2 つのセットの結合/交差/差分である別のセットを返す関数を作成することでした。交差点の解は次のとおりです。

def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)

要素がわかりません。Scalaはそれがセットの要素であることをどのように認識し、シェルで試行するとエラーが返されるのはなぜですか:パラメータータイプがありません.

ユニオンとディファレンスの解決策 (同じ):

def union(s: Set, t: Set): Set = elem => s(elem) || t(elem)

def diff(s: Set, t: Set): Set = elem => s(elem) && !t(elem)

Scala Setから:

ミュータブル セットのジェネリック トレイト。

セットは、重複する要素を含まないコレクションです。

実装上の注意: このトレイトは、その表現とは無関係に Set の操作のほとんどを提供します。通常、セットの具体的な実装によって継承されます。

具体的なセットを実装するには、次のメソッドの実装を提供する必要があります。

def contains(key: A): Boolean
def iterator: Iterator[A]
def +(elem: A): This
def -(elem: A): This
4

2 に答える 2

1

coursera の昨年の scala クラスから:

object FunSets {
  /**
   * We represent a set by its characteristic function, i.e.
   * its `contains` predicate.
   */
  type Set = Int => Boolean
  // [...]
}

つまり、定義済みのscala Settrait を参照するのではなく、 をIntパラメーターとして受け取り、 を返す関数を参照しますBoolean。たとえば、1 つの要素を含むセットは、trueを返し、falseを返す{3}関数によって表されます。f(Int)f(3)f(x)x != 3

あなたが与えた例:

def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)

Set以前のようにタイプを定義した場合にのみ機能しますInt => Boolean

于 2013-05-11T21:38:32.737 に答える