Подтвердить что ты не робот

Какой самый минимальный язык функционального программирования?

Каков самый минимальный язык функционального программирования?

4b9b3361

Ответ 1

Это зависит от того, что вы подразумеваете под минимальным.

Для начала, предком функциональных языков является, прежде всего, математическая логика. После этого произошло вычислительное использование определенных логик. В некотором смысле многие математические системы (ядра которых обычно весьма минимальны) можно назвать функциональными языками. Но я сомневаюсь, что вы после этого!

Самый известный Церковь Алонсо лямбда-калькуляция, из которые есть варианты и потомки:

  • Простейшая форма - это то, что называется нетипизированным лямбда-исчислением; это не содержит ничего, кроме лямбда-абстракций, без ограничений на их использование. Создание структур данных, использующих только анонимные функции, осуществляется с помощью так называемой Церковной кодировки и представляет данные по фундаментальным операциям на ней; число 5 становится "повторять что-то 5 раз" и т.д.

  • Lisp -семейные языки - это немного больше, чем нетипизированное лямбда-исчисление, дополненное атомными значениями, минус-ячейками и несколькими другими вещами. Я подозреваю, что Scheme является самым минималистом здесь, как будто память служит мне, он был создан сначала как учебный язык.

  • Исходная цель лямбда-исчисления, описывающая логические доказательства, не удалась, когда нетипизированная форма была показана несовместимой, что является вежливым термином для "позволяет доказать, что ложь истинна". (Исторические мелочи: документ, подтверждающий это, что в то время значило, сделало это, написав логическое доказательство, которое в вычислительных терминах перешло в бесконечный цикл.) Во всяком случае, использование в качестве логики было восстановлено путем введения < сильное > типизированное лямбда-исчисление. Они, как правило, не могут быть непосредственно полезны в качестве языков программирования, тем более, что, поскольку логически звук делает язык не Тьюрингом полным.

  • Однако, подобно тому, как Lisps происходит из нетипизированного лямбда-исчисления, типизированное лямбда-исчисление, расширенное со встроенной рекурсией, алгебраическими типами данных и несколькими другими вещами, дает вам расширенное семейство языков ML. Они, как правило, минимальны в сущности, с синтаксическими конструкциями, имеющими прямые переводы на лямбда-термины во многих случаях. Помимо явных диалектов ML, это также включает Haskell и несколько других языков. Однако я не знаю каких-либо особенно минималистских типизированных функциональных языков; такой язык, вероятно, будет страдать от плохого юзабилити гораздо хуже, чем минималистский нетипизированный язык.

Таким образом, по сравнению с вариантами лямбда-исчисления, чистое нетипизированное лямбда-исчисление без каких-либо дополнительных возможностей является завершением Turing и примерно минимальным, чем вы можете получить!

Однако, возможно, более минимальным является полное исключение понятия "переменные" - на самом деле это было изначально сделано для упрощения мета-математических доказательств о логических системах, если мне служит память, и использовать только функции более высокого порядка называемых комбинаторами. Здесь мы имеем:

  • Комбинационная логика сама по себе, как первоначально изобретено Моисей Шонфинкель и широко развернуто Haskell Curry. Каждый комбинатор определяется простым правилом подстановки, например Sxyz = xz(yz). Строчные буквы используются как переменные в этом определении, но имейте в виду, что сама комбинаторная логика не использует переменные или вообще присваивает имена. Разумеется, комбинационная логика минимальна, но не слишком дружелюбна как язык программирования. Наиболее известной является комбинатор SK. S определяется как в приведенном выше примере; K Kxy = x. Этих двух комбинаторов достаточно, чтобы сделать его Тьюрингом! Это почти пугающе минимально.

  • Unlambda - это язык, основанный на комбинаторах SK, расширяющий его с помощью нескольких дополнительных комбинаторов со специальными свойствами. Менее минимально, но позволяет писать "Hello World".

  • Однако даже два комбинатора - это больше, чем вам нужно. Существуют различные основы одного комбинатора; возможно, самым известным является iota Combinator, определенный как ιx = xSK, который используется в минималистском языке, также называемом Iota

  • Также есть примечание Lazy K, который отличается от Unlambda тем, что не вводит дополнительных комбинаторов, не имеет побочных эффектов и использует ленивую оценку. В принципе, это Haskell из мира на основе комбинатора-эзотерического языка. Он поддерживает как базу SK, так и iota combinator.

Какой из них поражает вас как самого "минимального", вероятно, является вопросом вкуса.

Ответ 3

Я бы предположил, что самый минимальный функциональный "язык программирования" будет лямбда-исчисление.

Ответ 4

Эзотерический язык программирования (aka esolang) - это язык программирования, предназначенный для проверки границ программирования языка программирования, как доказательство концепции, как программного искусства, как интерфейс взлома на другом языке (в частности, функциональное программирование или процедурные языки программирования), или как шутка. Использование esotericDistinguines этих языков из языков программирования, которые работают разработчики, для написания программного обеспечения. Обычно создатели esolang не предполагают, что язык будет использоваться для основного программирования, хотя некоторые эзотерические функции, такие как visuospatial syntax, вдохновили практическое применение в искусстве. Такие языки часто популярны среди хакеров и любителей.

Ответ 5

BrainF * ck - простой, простой в использовании язык программирования. Вот краткое описание.

Представьте, что у вас есть бесконечный ряд ящиков, каждый из которых пуст. К счастью, вы не одиноки! Вы можете двигаться вперед и назад по линии, вставлять в них вещи и вынимать их. Хотя довольно простой, с достаточным временем вы можете сделать что угодно: http://www.iwriteiam.nl/Ha_bf_inter.html. Вот команды.

+ | add one to currrent box
- | take one from current box
> | move one box to the right
< | move one box to the left
[] | loop
. | print current value
, | input current value

другие вещи, на которые нужно смотреть:

P "| упрощенное BF

язык f | более новый упрощенный BF

http://www2.gvsu.edu/miljours/bf.html | cool BF stuff/intro

https://www.esolangs.org/wiki/Language_list | список похожих языков/вариантов