2016-08-21 7 views
3

3つの関数があります。最初のものはブール条件の型エイリアスを定義しますスカラ特性関数

type Set = Int => Boolean 

これはエイリアス定義であることを理解しています。今二fucntion

def contains(set: Set, elem: Int): Boolean = set(elem) 

elem:Int(Int=>Boolean)を呼び出します。

  • QUESTION 1:機能のロジックはSetの下にありますか?
  • つまり、containsなどを呼び出すときにの関数の実際のパラメータ(この場合はcontainsは高次関数です)を渡す必要があります。偶数に設定された:第三の機能で

    val in:Boolean = contains({x=>(x%2)==0},2)


を:

def singletonSet(elem: Int): Set = set => set == elem 
  • 質問2:setが形成来るのでしょうか?正式なパラメータリストにはありません。

答えて

6

QUESTION 1:はい、あなたは、関数の「実装」だろうSetを渡す必要があります。このエクササイズのポイント(Oderskyのコース?)は、Setをアイテムの集合(集合の「通常の」定義)として定義するのではなく、アイテムがその集合に含まれるかどうかを示す関数として定義できることを示すことです設定されていない。従ってセットです。です。

QUESTION 2:setは、私たちがここに戻っている無名関数の引数に与えられた名前です。singletonSetの戻り値の型は、我々はタイプInt => Booleanの機能が実際にあると述べてきたようにSetを、であるので、私たちは(匿名の​​)関数を返します。このような関数を作成するには、構文x => f(x)を使用します。xは任意の名前で、f(x)はそれを使用する(または使用しない)式です。

+0

1)アンダーサウド 2)実際に 'Int => Boolean'よりも' Set'が返された場合、返されるのは 'singletonSet'です。だから、ここの 'set'は' Int'ですか? 'singletonSet'への呼び出しは、偶数のセットのようにどのように見えますか? – mCs

+0

ええ、(2)の 'set'は' Int'型です。 'singletonSet' _cannot_は偶数の集合を返します。シングルトンと呼ばれるのは、それが渡された' elem'である1つの項目(1つの整数)だけを返します。 –

+0

そのように 'singletonSet'の' Set'の戻り値の型は 'Int => Boolean'の評価を' set:Int =>(set:Int == elem:Int) 'に変更したものです。 – mCs

2

1)containsは実際には適切な型の関数と要素をとり、その関数を要素に適用する高次関数です。その論理は、要素が対応する集合にある場合にのみtrueと評価されるブール値関数によって集合が表現されていることです。関数containsは、要素の関数を評価し、値がtrueまたはfalseのいずれかであるかどうかによってその値が返されます。

2)singletonは、入力(set)が問題の要素と等しい場合にのみtrueと評価される匿名関数を返します。

+0

2)しかし、この 'set'は何ですか?フォームはどこにありますか?そのどこにも言及されていない? – mCs

+0

'set'は無名関数への入力を表します。 Scalaが 'set'が' Int'であると推論するには、 'Set'(これは' singletonSet'の戻り値の型)の宣言で十分です。匿名関数が動作する方法は、入力パラメータを宣言する必要はありません。 –

+0

私はupvotedしていただきありがとうございます。 – mCs

関連する問題