mCs - 1 year ago 237
Scala Question

# Scala characteristic function

We got three functions. The first one defines type alias for Boolean condition

``````type Set = Int => Boolean
``````

I understand that this is the alias definition. Now the second fucntion

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

calls the
`(Int=>Boolean)`
on
`elem:Int`
.

• QUESTION 1: Where is the logic of the function under
`Set`
?

• I mean, do I have to pass the
`Set`
function actual parameter (in which case the
`contains`
is a higher order function) when calling
`contains`
eg. for even numbers set:

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

In the third function:

``````def singletonSet(elem: Int): Set = set => set == elem
``````

• Question 2: Where does the
`set`
come form? Its not in the formal parameter list.

QUESTION 1: Yes, you have to pass a `Set` which would be the "implementation" of the function. The point of this exercise (Odersky's course?) is to show that a Set can be defined not as a collection of items (the "usual" definition of a set), but rather as a function that says whether an item is included in the set or not. So the Set is the function.
QUESTION 2: `set` is the name given to the argument of the anonymous function we're returning here: Since `singletonSet`'s return type is `Set`, which as we've said is actually a function of type `Int => Boolean`, we return an (anonymous) function. To create such a function, one uses the syntax `x => f(x)`, where `x` is any name you'd like and `f(x)` is an expression using it (or not).