Почему лямбда-исчисление не используется (вообще)? - PullRequest
4 голосов
/ 08 февраля 2011

Почему чистое нетипизированное лямбда-исчисление часто описывают как невозможное для использования?

С подходящей библиотекой функций это не будет примерно таким же, как у любого другого функционального языка?

Ответы [ 2 ]

12 голосов
/ 08 февраля 2011

Скорость не является большой проблемой. Например, вы можете решить использовать церковные цифры, но оптимизировать реализацию так, чтобы числа представлялись как обычно - таким образом, чтобы он был полностью прозрачен для пользователя. Результирующие числа, очевидно, будут работать так же хорошо, как и на любом языке, за исключением случаев, когда люди пытаются реализовать свои собственные арифметические операции и обнаруживают, что они не такие быстрые, как в реализации, или когда они обнаруживают, что используют встроенную 7 намного быстрее, чем соответствующее лямбда-выражение ... Но это указывает на намного худшую проблему. В простом лямбда-исчислении есть только функции с одним аргументом. Это означает, что вы работаете на языке ассемблера очень низкого уровня, где нет ошибок типа, поскольку все это просто функции. На самом деле, если вы придерживаетесь только простого лямбда-исчисления, ошибок вообще не будет. Здесь очень уместна аналогия с машинным кодом: там вы также можете делать все, что захотите - добавить две строки, и в результате получится какое-то случайное число. На языке лямбда-исчисления отправьте некоторую кодировку списка числовой функции, и она с радостью возвратит (поддельный) ответ.

6 голосов
/ 08 февраля 2011

Теоретически, теория и практика совпадают.На практике это не так.

Теоретически это был бы просто еще один функциональный язык.Но задумывались ли вы о том, как на самом деле делать математику с церковными цифрами?Да, ты можешь сделать это.Но ваши программы будут работать так медленно, что они будут выглядеть сильно испорченными.Практический функциональный язык должен найти способы найти прагматический компромисс между предоставлением абстракций, которые могут быть построены на основе, и использованием быстрых собственных реализаций часто используемых вещей.

...