Zakładając można przeczytać notacji lambda w Haskell, jest to bardzo proste:
\arguments -> body
tak proste wyrażenia mogą być:
\x -> x+1
\x y -> x+y
Lambdabot ma command pointful które można przekształcić pointfree do funkcji pointful. Wyrażony jako proste wyrażenie lambda staje się całkiem wyraźną funkcją wyższego rzędu.
$ pointful "((.) . (.))"
(\ i b c f -> i (b c f))
Więc co to zrobić w języku angielskim, to zajmuje funkcję w swoim pierwszym argumencie „ja” i odnosi się to do wyniku innej funkcji „b” stosowanej do argumentów „C” i „f”.
Tak naprawdę to ta funkcja po normalizacji go:
$ pointful "((.) . (.)) abs (-)"
(\ c f -> abs (c - f))
co jest dość łatwe do zrozumienia, jak to jest absolutny błąd.
Jeśli chcesz zobaczyć pochodzenie tego, co Lambdabot robi za kulisami, zobacz: this post, która jest jedynie pozornie beta-redukcją terminów lambda. Jedyną częścią Sztuką jest to, że mamy do mieszania operatorów Infix i przedrostek, ten sam termin może być napisane jaśniej jak:
(.) (.) (.) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
Wtedy staje się jasne, że jest to po prostu „kompozycja składu function”.
Patrząc typu pouczające: (...()()) :: (B -> C) -> (A -> A1 -> b) -> A -> A1 -> c – dorchard
Ale dlaczego "cycki"? –
@SergeyK .: czy to poważne pytanie? :) –