Напишите комбинатор с фиксированной точкой, используя как можно меньше символов на выбранном вами языке.
- произвольная форма ( т. е. самое короткое): вся программа, реальная функция, фрагмент кода
- вы не можете использовать вашу стандартную библиотеку, если она есть
- однако вы можете извлечь его из других высокоуровневых функций, если захотите, а не создавать его из баз
Пожалуйста, включите рекурсивный факториал или Фибоначчи, который использует его в качестве демонстрации.
В этом вопросе допустима ссылка на себя, цель - исключить ее из рекурсивной функции, к которой она будет применяться.
(define Y(lambda(f)(f(Y f))))
?)Ответы:
Хаскель: 10 персонажей
Пример использования для создания рекурсивных определений факториала или n-го Фибоначчи:
Тем не менее, более распространенным способом использования
y
будет генерирование этих последовательностей напрямую, а не в виде функций:Конечно, с Haskell это немного похоже на отстрел рыбы в бочке! Эта
Data.Function
функция называется в библиотекеfix
, хотя и реализована более многословно.источник
Perl, 37
Факториальная демонстрация:
Демонстрация Фибоначчи:
источник
GNU C - 89 символов
Пример:
источник
к2, 12 символов
Очевидная самоссылочная реализация является самой короткой. Это признак хорошего языкового дизайна. К сожалению, K не ленив, поэтому мы можем управлять только по стоимости.
Это определение также должно работать в k4 и q без проблем, хотя я предполагаю k2 для примеров ниже.
Более скромные 18 символов позволяют нам точно транскрибировать
(λx. x x) (λxyz. y (x x y) z)
в К.Может быть, когда-нибудь (k7?) Это может выглядеть так
Y:{x Y x}
.источник
Python 3, 30 байт
Демо:
Кредиты: https://gist.github.com/WoLpH/17552c9508753044e44f
источник