LINUX.ORG.RU

Императивность Scheme

 ,


0

2

Правильно ли я понимаю, что наличие мутабельных переменных (set! и компания) позволяет отнести Scheme/Lisp к императивным языкам? Из-за мутабельности вызовы функций могут иметь сайд-эффекты, становится важен порядок вызовов, ну и далее вырастает весь комплекс проблем классических императивных процедурных языков. Если это рассуждение не правильно, то объясните пожалуйста в развернутой форме, что именно не так?

★★★★★

мультипарадигменные языги

Bad_ptr ★★★★ ()

А схему к чистым функциональным языкам никто никогда и не относил. Разве что упоротые лисперы в влажных фантазиях, но они неправы.

Dark_SavanT ★★★★★ ()

а вообще в чём проблема. Ты хочешь, чтобы кто-то взбугуртнул из-за того что ты лисп обозвал императивщиной?
или из-за того что ты счеме обозвал функциональщиной?

Bad_ptr ★★★★ ()

Все правильно. Scheme императивный язык, там есть императивная конструкция явного порядка вычислений (begin ...), и хотя стандарт и не специфицирует порядок вычислений аргументов функций, но точно так же это не задано и для Си.

anonymous ()
Ответ на: комментарий от anonymous

императивная конструкция явного порядка вычислений

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

crowbar ()
Ответ на: комментарий от Bad_ptr

На ЛОРе уже паранойя по поводу ЛNSP-тредов?

Deleted ()
Ответ на: комментарий от Dark_SavanT

но они неправы.

в чём же они не правы-то?

In computer science, functional programming is a programming paradigm, a style of building the structure and elements of computer programs, that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

Т.е. можно даже на сишке писать в функциональном стиле, только неудобно. А в лиспе вполне удобно.

Bad_ptr ★★★★ ()
Ответ на: комментарий от lazyklimm

а императивность - немного совсем другое.

tell me moar, хочу поржать

anonymous ()
Ответ на: комментарий от crowbar

Кого волнует в каком порядке вычисляются функции, если они все равно без побочных эффектов.

Ну так в Схеме-то они с побочными эффектами. Для функций без побочных эффектов (begin ...) вообще не нужен, так как результат всех выражений кроме последнего он херит.

anonymous ()
Ответ на: комментарий от lazyklimm

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

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

ну так просто не используй set и пиши в функциональном стиле

Bad_ptr ★★★★ ()
Ответ на: комментарий от Manhunt

Оке, раз язык не pure - будем считать его императивным, так?

Так с таким подходом любую Си-шную байтодробилку можно декларативной обозвать, не?

не

lazyklimm ★★★★★ ()
Ответ на: комментарий от lazyklimm

Оке, раз язык не pure - будем считать его императивным, так?

Если язык имеет все проблемы классической императивщины, то было бы странно считать его декларативным, так?

Си-шную байтодробилку можно декларативной обозвать

не

Почему? Объясни внятно, в чем разница?

Manhunt ★★★★★ ()
Ответ на: комментарий от Manhunt

Если язык имеет все проблемы классической императивщины, то было бы странно считать его декларативным, так?

Объясни каким образом в хаскеле можно получить/установить дату/время.
И почему два разных вызова функции для получения даты/времени возвращают разный результат.

Bad_ptr ★★★★ ()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Если язык имеет все проблемы классической императивщины, то было бы странно считать его декларативным, так?

Ну тогда декларативных языков не существует, так?

lazyklimm ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Разве что упоротые лисперы в влажных фантазиях, но они неправы.

Ты так говоришь, как-будто чистая функциональность - это что-то хорошее.

anonymous ()
Ответ на: комментарий от lazyklimm

Ну тогда декларативных языков не существует, так?

Почему же? html3, например, вполне себе декларативный.

Manhunt ★★★★★ ()

далее вырастает весь комплекс проблем классических императивных процедурных языков

Не то что у функциональщиков: нет софта - нет проблем.

anonymous ()
Ответ на: комментарий от lazyklimm

А на хера нужны «декларативные языки общего назначения»? Императивных-то языков общего назначения, считай, не существует, все под что-то, да заточенны.

anonymous ()
Ответ на: комментарий от Dark_SavanT

Ограничиваться только одним подходом - плохая идея.

Ну так и у кого теперь влажные фантазии?

anonymous ()
Ответ на: комментарий от crowbar

Кого волнует в каком порядке вычисляются функции, если они все равно без побочных эффектов.

Ты не понял, о чем он сказал.

ak380618 ()
Ответ на: комментарий от aedeph_

То ли очень толсто, то ли слишком глупо.

Второе. Очередной, не прочитавший пару статей в энциклопедии для самых маленьких.

ak380618 ()

Правильно ли я понимаю, что наличие мутабельных переменных (set! и компания) позволяет отнести Scheme/Lisp к императивным языкам? Из-за мутабельности вызовы функций могут иметь сайд-эффекты, становится важен порядок вызовов, ну и далее вырастает весь комплекс проблем классических императивных процедурных языков. Если это рассуждение не правильно, то объясните пожалуйста в развернутой форме, что именно не так?

Это мультипарадигменные языки.

Дальнейшие рассуждения сразу теряют весь смысл.

ak380618 ()
Ответ на: комментарий от ak380618

Возможно я путаю понятия «мутабельность» и «императивность». Просто не вижу принципиальной разницы в записях:

return sin(x) + cos(x)
и
var a = sin(x)
var b = cos(x)
return a + b

где все переменные иммутабельны. Хотя в scheme для этого есть let.

crowbar ()
Ответ на: комментарий от Manhunt

Так с таким подходом любую Си-шную байтодробилку можно декларативной обозвать, не?

Я разрешаю.

unlog1c ★★★ ()

позволяет отнести Scheme/Lisp к императивным языкам

Разделение на императивные и декларативные языки, ИМХО, вообще глупость. Можно говорить только о парадигмах, декларативно/функционально можно писать на любом языке. Не все языки поощряют тот или другой подход, в этом вся разница.

anonimous ()
Ответ на: комментарий от Dark_SavanT

По моим наблюдениям на ЛОРе, Схему и Лисп к чистым функциональным языкам относят только те, кто что-то слышал, но сам ни строчки не написал.

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

naryl ★★★★★ ()
Ответ на: комментарий от lazyklimm

декларативных языков не существует

ЛОМАЮЩИЕ НОВОСТИ! Да, их не существует. Среди практически применимых. Существуют языки, в которых можно выделить полностью декларативные подмножества.

buddhist ★★★★★ ()
Ответ на: комментарий от naryl

По моим наблюдениям на ЛОРе, Схему и Лисп к чистым функциональным языкам относят только те, кто что-то слышал, но сам ни строчки не написал.

Причем они мыслят примерно так: ООП - это мейнстрим, хорошо, а все что не мейнстрим, то функциональщина - фу, кака.

Борщедвачеров тут уже ссаными тряпками за это отхлестали, теперь они делят программирование на ООП, функциональщину и LISP. :D

anonymous ()

Да, все так. Более того, чисто функциональных языков, на которых можно было бы написать что-нибудь полезное, вообще не существует. Существуют только языки с большим или меньшим чисто функциональным подмножеством. Монада IO — что-то типа фокуса с отрыванием большого пальца.

buddhist ★★★★★ ()

Спасибо всем за разъяснения! Тему можно считать исчерпанной.

Manhunt ★★★★★ ()
Ответ на: комментарий от lazyklimm

Ну тогда декларативных языков не существует

SQL

monk ★★★★★ ()

А вот интересно, можно ли написать императивный код без «set!», это должно выглядеть как взрыв мозга наверное, если возможно?

anonimous ()
Ответ на: комментарий от anonymous

Скобкоту здесь презирают вовсе не только за ФП-дрочерство. У скобкоты и без функциональщины проблем полно.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.