Przeczytajmy rodzaj tyłu, w logicznym porządku.
Say masz skończony zbiór liczb całkowitych: 0, 1, 2, 3, 5, 8
na przykład
Jednym ze sposobów, aby opisać to zbiór liczb całkowitych jest przez funkcję (jej characteristic or indicator function), że dla każdej liczby całkowitej, zwraca prawdę, jeśli liczba całkowita jest w set, false, jeśli tak nie jest. Podpis dla tej funkcji, jak to opisaliśmy, musi zawsze być Int => Bool
("podaj liczbę całkowitą, powiem ci, jeśli jest w zestawie"), a jej implementacja będzie się różnić w zależności od konkretnego zestawu.
Do zestawu w moim przykładzie powyżej można napisać tej funkcji, po prostu jako:
val mySet: Int => Boolean = x => Array(0,1,2,3,5,8) contains x
lub uznają, że ints w zestawie są pierwszymi sekwencji Fibonacciego i określić F w nieco bardziej wyrafinowany sposób (czego nie zrobię tutaj ...). Należy zauważyć, że "zawiera" użyłem jest zdefiniowany dla wszystkich kolekcji scala. W każdym razie teraz masz funkcję, która mówi ci, co jest w zestawie, a co nie. Spróbujmy w REPL.
scala> val mySet: Int => Boolean = x => Array(0,1,2,3,5,8) contains x
mySet: Int => Boolean = <function1>
scala> mySet(3)
res0: Boolean = true
scala> mySet(9)
res1: Boolean = false
Teraz MYSET ma typ Int => Boolean
, co możemy uczynić bardziej czytelny jeśli definiujemy ją jako rodzaj pseudonimu.
scala> type Set = Int => Boolean
defined type alias Set
Poza czytelności, definiowanie Set
jak aliasem Int => Boolean
czyni to wyraźnie zaznaczyć, że w pewnym sensie Set jest jej funkcja charakterystyczna. możemy przedefiniować MYSET w bardziej zwięzły (ale inaczej równoważnik) sposób z Set
typu alias:
scala> val mySet: Set = x => Array(0,1,2,3,5,8) contains x
mySet: Int => Boolean = <function1>
teraz za ostatnim elementem tej długiej odpowiedzi.Zdefiniujmy charakterystyczną funkcję opisującą ten zestaw Singleton: 3
. proste:
val Singleton3 : Set = set => set == 3
dla zestawu Singleton zawierającego tylko 4, byłoby:
val Singleton4 : Set = set => set == 4
Tak, niech uogólniać tworzenie tych funkcji i napisać metodę, która zwraca funkcję Singleton, że dla liczbą całkowitą opisuje zestawu zawierającego że całkowita:
def singletonSet(elem: Int): Set = set => set == elem
DODATEK:
pominąłem tę część, ponieważ nie było naprawdę potrzebne: def contains(set: Set, elem: Int): Boolean = set(elem)
Myślę, że to rodzaj bezcelowe i (bez więcej kontekstu) wygląda podobnie jak contrived przykład wykazać, w jaki sposób może przekazać funkcję jako argument, tak jak każdy inny typ w scala. Zajmuje funkcję Int => Bool
i Int
i dotyczy tylko funkcja do Int
więc można zrobić
scala> contains(mySet, 3)
res2: Boolean = true
który jakby wzywając mySet(3)
bezpośrednio.
Prosisz o odpowiedź na Coursera Scala przypisanie przedmiotu 2. –
wierzę, po prostu poprosił o wyjaśnienie. W rzeczywistości biorę ten kurs już teraz i funkcjonalne programowanie jest dla mnie całkowicie nowe. Też mam problem z tym przypuszczeniem ... Nie chcę rozwiązania - tylko wytłumaczenie. A Paola poniżej dawała dokładnie to, czego potrzebowałem. – Moby04
Ja też intuicyjnie napisałem to (ostatecznie), ale skorzystałem z odpowiedzi Paola. Nie każdy, kto tu przychodzi, próbuje oszukać. Dziękuję Moby za obronę dobrego punktu, w którym zadawano to pytanie. +1 – noogrub