![]() |
|
![]() ![]() ![]() |
|
Lisper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.8.2006 Репутация: нет Всего: нет |
Что за бред ? Какой еще "рекурсивный язык" ? Предназначенный для обработки списков ??? Из "LISt Processing" не значит, что это все для чего он нужен. Лисп - это семейство языков, поддерживающих множество парадигм программирования. Если говорить о Common Lisp, то он в высокой степени императивен, т.е. широко используются конструкции характерные для таких языков как C/C++,Pascal,Java - циклы, переменные с изменяемыми состояниями, мощная система ООП (Common Lisp Object System или CLOS) также базируется на императивных конструкциях. При программировании на Лиспе в целом поощряется функциональный подход, когда значение функции зависит целиком от явно указанных входных аргументов. Стандартная библиотека Common Lisp в том числе содержит функции для работы со списками не оказывающие сторонних эффектов на передаваемые объекты, что позволяет легко писать в функциональном стиле. Для множества функций в библиотеке есть императивные двойники - для remove есть delete и т.п. Для ознакомления с современным использованием этого языка можно зайти на www.franz.com и www.lispworks.com. |
|||
|
||||
albertn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
А никто и не говорит, что обработка списков-это единственное что он умеет. Я просто говорю, что сама программа преставляет собой выражения в виде списков, а результат работы программы состоит в вычислении этих выражений. Т.е. если сказать грубо то программа только и делает, что работает со списками. Но ведь естественно, что в этих списках могут встречаться операции чтения/записи из файла, работа с консолями, и очень много всего, но делается это все в результате разбора списков. Есть такая замечательная фраза "В чужой монастырь со своим уставом не лезут". Тогда объясни мне, зачем использовать эти конструкции, если он отлично может обходиться своими родными функциями не хуже. Если же их использовать, то зачем тогда вообще писать на лиспе? Я не то хотел написать, случайно вырвалось. |
|||
|
||||
Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
||||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: нет Всего: 173 |
А ещё есть мнение, что догматизм — это плохо. Восторг по поводу функций высшего порядка (mapcar и т.д.) понятен ![]() Поддержка функционального стиля — не первая и не последняя причина писать на Лиспе ![]() -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
albertn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Не знаю как у тебя, но я при написании какой-либо программы всегда стараюсь, чтобы она была как можно более идеологически правильной. Причем и с точки зрения алгоритма, и с точки зрения идеологии языка. Ведь согласись, что эти функции для обработки списков и его списочная структура сделали этот язык уникальным! Тогда зачем нарушать его уникальность, и писать на нем, как на обычном языке программирования? |
|||
|
||||
Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Конечно. Просто для каждой задачи квалифицированный программист должен уметь находить оптимальное, или даже элегантное, изящное решение (первоначальное значение слова хакер). Глупо использовать язык, заточенный под одно, для написания другого. Ещё хуже не использовать для решения задачи язык, который специально для неё создан. Это не догма. Я работал с Lisp, и он мне не понравился только скобками. Он даёт мощные средства и является чуть ли не "чистым" функциональным языком. Про него не надо ругаться, и, если кто-то любит его, пускай использует в соотв. задачах -- по-моему, только выиграет. Не все задачи же решаются или, вернее сказать, предназначены для решения на декларативных языках. И бояться императивщины совсем не стоит. Помню в Visual Prolog присваивание никто не хотел видеть, а когда ввели, поняли, что с ним стало только удобнее, а в чистом виде присваивания нет даже. |
|||
|
||||
svg |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 13.4.2005 Репутация: 14 Всего: 18 |
Тогда надо уточнить, идеология какого языка имеется в виду. Идеология CommonLisp - прагматизм,прагматизм и еще раз прагматизм. Идеология Scheme - минимализм, а потом все остальное. Если бы язык пытался следовать именно функциональному стилю, то в первую очередь в нем бы отсутствовали или были сильно ограничены мутирующие объекты и присваивание. Пример - Erlang. Странно было бы причислять CommonLisp к сугубо функциональным языкам, если даже goto (go) присутствует в спецификации в явном виде.
Уникальноть Лисп - отсутствие синтаксиса и макросы. Мощное сочетание и основная причина его использования. |
||||
|
|||||
albertn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
В прошлом семестре на одном из предметов нам препод прогружал, что использование циклов, ифов, и всего остального, что насильно было в лисп вставленно, глупо и не правильно, т.к. все это можно сделать и оригинальными лисповскими функциями. Я понимаю когда в языки программирования разрешают вставлять ассемблерные коды, но такой подход у меня ассоциируется с использыванием goto, к который у меня вызывает отвращение. |
|||
|
||||
Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Интересная ассоциация. В любом случае, если ты хочешь соответствовать идеологии, то можешь писать истинно функционально, не используя "навороты" из императивных языков. Но, думаю, ввели некоторые для облегчения написания и читаемости кода. А без этого в индустрию, например, не пройти. Но я и не говорю, что это надо... |
|||
|
||||
albertn |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Я бы не сказал, что он чисто функциональный, т.к. он интерпретатор, способный изменять свой код находу.
А goto, как и все остальные (не свойственные ему) функции к нему прикрепили насильно, дабы дойти до широких масс. Добавлено @ 12:51
Просто у каждого языка есть свои гласные и негласные правила, такие как расстановка отступов, именование переменных и функций, а также откуда начинать цикл (0 - Си; 1 - Паскаль), и т.д. Все эти правила каждый может соблюдать и не соблюдать, но я лично, если выбрал выбрал язык, то стараюсь пользоваться правил и рекомендаций авторов и разработчиков стандарта языка. |
||||||
|
|||||||
Cr@$h |
|
||||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Хотя, говорим мы о чём-то более существенном -- отках от императивных конструкций и следование чистому функциональному стилю.
И правильно делаешь. Но неужели рядом с императивными конструкциями они приводят рекомендации типа: старайтесь не использовать, или заменяется следующим функциональным кодом. Думаю, как раз стоит обрать внимание как эти люди, к которым ты присушиваешься, отзываются и позиционируют императивные средства, введённые в Lisp. ![]() |
||||
|
|||||
albertn |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Ну несовсем же чистому, а наиболее к нему приблеженному. Хотя имхо это тоже можно считать правилом или пожеланием.
Мне так препод говорил, и утверждал, что это идеологически правильно. |
||||
|
|||||
Cr@$h |
|
||||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Так вот как раз важно понимать, когда использовать императивные средства, делаяя код понятнее и изящнее. Это элемент искусства.
Препды страдают консерватизмом. Сейчас появляется всё больше гибридов: императивный-декларативный. И будущее, я считаю, как раз за этим. В том же CL много чего уже есть. Да и C# 3.0 обогатят функциональными средствами. Так что нужно идти в ногу со временем, выбирать для себя оптимальное сочетание средств, получая удовольствие от программирования и находясь в гармонии с языком. Слушай свой опыт и пиши так, как ты бы хотел, чтобы писали другие. Это всё, что ты можешь, и всё, что ты должен. IMHO |
||||
|
|||||
Void |
|
||||||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: нет Всего: 173 |
Интересная точка зрения ![]()
Ну, во-первых, HiPE. Во-вторых, я бы сначала сослался не на возможность горячей замены кода, а на наличие побочных эффектов функций (в виде обмена сообщениями, словаря процесса и т.д.). А впрочем, какая суть разница, чистый или не чистый? Язык должен решать свои задачи, и у Erlang это получается весьма успешно.
Не соглашусь. Вот поэтому:
Программа должна удовлетворять заданным функциональным требованиям и быть по возможности лёгкой в сопровождении. Остальное вторично и следует из этих требований. Часто следование идеологии языка способствует достижению этих целей. Но рассматривать её как самоцель я бы не стал. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||||||
|
|||||||||||
Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
По-моему, не наджо вообще на идеологии зацикливаться. Что на ней свет клином сошёлся. Пиши программу, чтобы она была удобной, выдерживай хороший стиль, но следовать только функциональной парадигме не за чем. Если язык предоставляет множество средств, то научись использовать их все и эфективно в каждом конкретном случае, тогда добьёшься лучших результатов с этим языком. Сейчас много парадигм и многие живут очень долго, показывая свою востребованность. Объединение или совмещение их лучших идей и положений представляется естественным путём эволюции языков.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума LISP | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LISP | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |