2014-10-08 99 views
0

的身體什麼是以下類型的定義斯卡拉:lambda作爲功能

type Set = Int => Boolean 

def union(s: Set, t: Set): Set = { x => (contains(s, x) || contains(t, x)) } 

工會的身體上面可能的實際用例是一個lambda函數。

+0

提示:union的返回類型是什麼? – 2014-10-08 10:31:58

+0

我知道Int => Boolean,但是我沒有看到我們什麼時候可以使用這樣的實現。在這種情況下x是什麼 – 2014-10-08 10:35:22

+1

定義一個集合有兩種方法:枚舉所有元素或提供一個函數,告訴你元素是否在集合中(這稱爲集合的特徵函數)。這是使用特徵函數的集合的實現。 – 2014-10-08 10:37:23

回答

3
  1. 當爲lambda作爲該函數的主體的實際用例

閱讀關於Higher order functions

  • 我們如何調用聯合函數,
  • Set是一個函數,它接受一個I​​nt並返回布爾值。 Union需要兩個集合,並返回第三個集合。所以我們首先需要兩個Set實例(兩個函數)。

    scala> type Set = Int => Boolean 
    defined type alias Set 
    
    scala> def contains(s: Set, x: Int): Boolean = s(x) // I assumed this 
    contains: (s: Set, x: Int)Boolean 
    
    scala> def union(s: Set, t: Set): Set = { x => (contains(s, x) || contains(t, x)) } 
    union: (s: Set, t: Set)Set 
    
    scala> val oneSet: Set = (x: Int) => x == 1 
    oneSet: Set = <function1> 
    
    scala> val twoSet: Set = (x: Int) => x == 2 
    twoSet: Set = <function1> 
    
    scala> val oneUnionTwo: Set = union(oneSet, twoSet) 
    oneUnionTwo: Set = <function1> 
    

    現在我們有了第三套,這是oneSet工會和twoSet

    如何在x詮釋將作爲參數傳遞

    由於oneUnionTwo基本上是一個函數,需要Int。 x是此函數/ Set的唯一參數。你可以通過調用Set來傳遞它oneUnionTwo

    scala> oneUnionTwo(1) 
    res0: Boolean = true 
    
    scala> oneUnionTwo(2) 
    res1: Boolean = true 
    
    scala> oneUnionTwo(3) 
    res2: Boolean = false