Rodzaj szerokiego pytania, ale miło, podoba mi się.
Aby wesprzeć mój przykład, w tej odpowiedzi mam zamiar wdrożyć & hellip;
abuild :: Number -> (Number -> a) -> [a]
& hellip; który, jak sugeruje typ, pobiera liczbę i funkcję do zbudowania tablicy. Może to być przydatne, jeśli chcesz zbudować tablicę o znanym rozmiarze na podstawie niektórych obliczeń.
Zbudujmy tablicę z 5 elementami, korzystając z funkcji identyfikacji, id
.Jak widać, sekwencyjny wskaźnik liczbowy zaczynając od 0 poświęca się swojej budowniczego funkcja
abuild (5) (id) // => [0,1,2,3,4]
Tym razem zróbmy coś z budowniczym. Wyprostujemy dane wejściowe. Bardzo zaawansowany.
abuild (5) (x=> x * x)
// => [0,1,4,9,16]
A może nie zależy nam na danych wejściowych. Zawsze lubię dobry śmiech. Śmieję się z rzeczy ciągle. Można powiedzieć, że I K('ha')
& hellip;
abuild (5) (K('ha'))
// => ['ha','ha','ha','ha','ha']
Bum! Bardzo przydatne, prawda? To K
Realizacja
Śmiało i uruchomić go zobaczyć K
w akcji!
// id :: a -> a
const id = x=> x
// K :: a -> b -> a
const K = x=> y=> x
// add :: Number -> Number -> Number
const add = x=> y=> y + x
// reduce :: (a -> b) -> b -> [a] -> b
const reduce = f=> y=> ([x,...xs])=> {
if (x === undefined)
return y
else
return reduce (f) (f (y) (x)) (xs)
}
// map :: (a -> b) -> [a] -> [b]
const map = f=> reduce (xs=> x=> [...xs, f(x)]) ([])
// iterate :: Number -> (a -> a) -> a -> [a]
const iterate = n=> f=> x=>
n > 0 ? [x, ...iterate (n - 1) (f) (f(x))] : []
// abuild :: Number -> (Number -> a) -> [a]
const abuild = n=> f=>
map (f) (iterate (n) (add (1)) (0))
console.log(abuild (5) (id))
// => [0,1,2,3,4]
console.log(abuild (5) (x=> x * x))
// => [0,1,4,9,16]
console.log(abuild (5) (K('ha')))
// => ['ha','ha','ha','ha','ha']
http://cs.stackexchange.com/questions/55441/what-is-the-purpose-of-the-ski-combinator-calculusor-even-lambda-calculus- wha –
Wygląda jak funkcja CL [constanty] (http://clhs.lisp.se/Body/f_cons_1.htm), która czasami jest przydatna. – Sylwester
W językach curried użyjesz go, gdy chcesz, aby wywołanie zwrotne zignorowało pierwszy argument. – Bergi