Zwrot, który ostatnio zauważyłem, to pojęcie stylu „bez punktów” ...
Najpierw było to pytanie, a także to .
Potem odkryłem , że piszą tutaj: „Innym tematem, który warto omówić, jest niechęć autorów do stylu bez punktów”.
Co to jest styl „bez punktów”? Czy ktoś może podać zwięzłe wyjaśnienie? Czy ma to coś wspólnego z „automatycznym” curry?
Aby poznać mój poziom - uczyłem się Schematu i napisałem prostego tłumacza Schematu ... Rozumiem, co to jest „ukryte” curry, ale nie znam żadnego Haskella ani ML.
functional-programming
coding-style
scheme
pointfree
Paul Hollingsworth
źródło
źródło
Odpowiedzi:
Wystarczy spojrzeć na artykuł w Wikipedii, aby uzyskać definicję:
Przykład Haskella:
Konwencjonalne (jawnie określasz argumenty):
Bez punktów (
sum
nie ma żadnych jawnych argumentów - to po prostu fałd+
zaczynający się od 0):Albo jeszcze prościej: zamiast tego
g(x) = f(x)
możesz po prostu pisaćg = f
.Więc tak: jest to ściśle związane z curry (lub operacjami takimi jak kompozycja funkcji).
źródło
sum (x:xs) ...
zamiastsum sum (x:xs) ...
?Styl bez punktów oznacza, że argumenty definiowanej funkcji nie są wyraźnie wymienione, że funkcja jest definiowana poprzez kompozycję funkcji.
Jeśli masz dwie funkcje, na przykład
a jeśli chcesz połączyć te dwie funkcje w jedną, która oblicza
x*x+1
, możesz zdefiniować ją jako „punktową” w następujący sposób:Bezcelową alternatywą byłoby nie mówić o argumentacji
x
:źródło
Przykład JavaScript:
Odniesienie
źródło
Styl bez punktów oznacza, że kod nie wymienia wprost swoich argumentów, mimo że istnieją i są używane.
Działa to w Haskell ze względu na sposób działania funkcji.
Na przykład:
zwraca funkcję, która przyjmuje jeden argument, dlatego nie ma powodu, aby jawnie wpisywać argument, chyba że po prostu chcesz.
źródło
myShow = show
. Więcej na ten temat można znaleźć na wiki HaskellOto jeden przykład w TypeScript bez żadnej innej biblioteki:
Jak widać, styl bez punktów jest bardziej „płynny” i łatwiejszy do odczytania.
źródło
this.moreThan(10)
nie jest to nazwana funkcja, jest to funkcja curried, a także funkcja, która domyślnie (a zatem bez punktu) przyjmie atransaction
jako dane wejściowe.