Функция набора Scala

В курсе Stanford Scala я встретил следующее задание:

Упражнение 1 - Наборы как функции:

В этом упражнении мы представим наборы как функции от Ints до Booleans:

type Set = Int => Boolean

a ) Напишите функцию «set», которая принимает параметр Int и возвращает набор, содержащий этот Int.

b ) Напишите функцию «содержит», которая принимает Set и Int в качестве параметров и возвращает true, если Int находится в Set, и false в противном случае.

c ) Напишите функции «union» , «пересечение» и «минус», которые принимают два набора в качестве параметров и возвращают набор.

d ) Можно ли написать функцию «подмножество», которая принимает два набора в качестве параметров и возвращает истину, если fi первый является подмножеством второго и ложно в противном случае?

Решения a , b и c довольно тривиальны:

def set(i: Int): Set = n => n == i

def contains(s: Set, i: Int) = s(i)

def union(a: Set, b: Set): Set = i => a(i) || b(i)

def intersect(a: Set, b: Set): Set = i => a(i) && b(i)

def minus(a: Set, b: Set): Set = i => a(i) && !b(i)

Но есть ли какое-нибудь элегантное решение для d ? Конечно, строго говоря, ответ на d - «да», так как я могу написать что-то вроде:

def subset(a: Set, b: Set) = Int.MinValue to Int.MaxValue filter(a) forall(b)

, но это, вероятно, неправильный путь.

12
задан Frakcool 23 May 2014 в 05:52
поделиться