Napisz kombinator punktów stałych z jak najmniejszą liczbą znaków, w wybranym języku.
- dowolna forma ( tzn . najkrótsza): cały program, aktualna funkcja, fragment kodu
- nie możesz używać swojej standardowej biblioteki, jeśli ma taką bibliotekę
- możesz jednak wyodrębnić go z innych funkcji wysokiego poziomu, które wolisz to zrobić niż zbudować z podstaw
Podaj rekurencyjną silnię lub Fibonacciego, która używa jej jako wersji demonstracyjnej.
W tym pytaniu samo-odniesienie jest dopuszczalne, jego celem jest jedynie usunięcie go z funkcji rekurencyjnej, do której będzie się odnosił.
(define Y(lambda(f)(f(Y f))))
?)Odpowiedzi:
Haskell: 10 znaków
Przykład zastosowania do tworzenia rekurencyjnych definicji czynnikowych lub n-Fibonacciego:
Jednak bardziej powszechnym sposobem użycia
y
byłoby wygenerowanie tych sekwencji bezpośrednio, a nie jako funkcji:Oczywiście w przypadku Haskell jest to trochę jak strzelanie do ryb w beczce!
Data.Function
Biblioteka posiada tę funkcję, o nazwiefix
, choć nieco bardziej realizowane --long.źródło
Perl, 37
Demonstracja czynnikowa:
Demonstracja Fibonacciego:
źródło
GNU C - 89 znaków
Przykład:
źródło
k2, 12 znaków
Oczywista implementacja autoreferencji jest najkrótsza. To znak dobrego projektowania języka. Niestety K nie jest leniwy, więc możemy zarządzać tylko wartością według wartości.
Ta definicja powinna również działać bez problemu w k4 i q, choć zakładam, że k2 dla poniższych przykładów.
Bardziej skromne 18 znaków pozwala nam dokładnie zapisać się
(λx. x x) (λxyz. y (x x y) z)
na K.Może kiedyś (k7?) Może to wyglądać
Y:{x Y x}
.źródło
Python 3, 30 bajtów
Próbny :
Kredyty: https://gist.github.com/WoLpH/17552c9508753044e44f
źródło