Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разговор о Lisp'е 
:(
    Опции темы
Lisper
Дата 24.8.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.8.2006

Репутация: нет
Всего: нет



Цитата(albertn @ 22.8.2006,  13:22)
Лисп (LISP, от англ. list Processing — «обработка списков») рекурсивный язык предназначенный для обработки списков (как и вложенных списков).

Что за бред ? Какой еще "рекурсивный язык" ? Предназначенный для обработки списков ??? Из "LISt Processing" не значит, что это все для чего он нужен. 

Лисп - это семейство языков, поддерживающих множество парадигм программирования. 
Если говорить о Common Lisp, то он в высокой степени императивен, т.е. широко используются конструкции характерные для таких языков как C/C++,Pascal,Java - циклы, переменные с изменяемыми состояниями, мощная система ООП (Common Lisp Object System или CLOS) также базируется на императивных конструкциях. 

При программировании на Лиспе в целом поощряется функциональный подход, когда значение функции зависит целиком от явно указанных входных аргументов. Стандартная библиотека Common Lisp в том числе содержит функции для работы со списками не оказывающие сторонних эффектов на передаваемые объекты, что позволяет легко писать в функциональном стиле. Для множества функций в библиотеке есть императивные двойники - для remove есть delete и т.п.

Для ознакомления с современным использованием этого языка можно зайти на www.franz.com и www.lispworks.com.
PM MAIL   Вверх
albertn
Дата 24.8.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(Lisper @  24.8.2006,  11:26 Найти цитируемый пост)
Предназначенный для обработки списков ??? Из "LISt Processing" не значит, что это все для чего он нужен.

А никто и не говорит, что обработка списков-это единственное что он умеет. Я просто говорю, что сама программа преставляет собой выражения в виде списков, а результат работы программы состоит в вычислении этих выражений. Т.е. если сказать грубо то программа только и делает, что работает со списками. Но ведь естественно, что в этих списках могут встречаться операции чтения/записи из файла, работа с консолями, и очень много всего, но делается это все в результате разбора списков.
Цитата(Lisper @  24.8.2006,  11:26 Найти цитируемый пост)
Если говорить о Common Lisp, то он в высокой степени императивен, т.е. широко используются конструкции характерные для таких языков как C/C++,Pascal,Java - циклы, переменные с изменяемыми состояниями, мощная система ООП (Common Lisp Object System или CLOS) также базируется на императивных конструкциях. 

Есть такая замечательная фраза "В чужой монастырь со своим уставом не лезут". Тогда объясни мне, зачем использовать эти конструкции, если он отлично может обходиться своими родными функциями не хуже. Если же их использовать, то зачем тогда вообще писать на лиспе?
Цитата(Lisper @  24.8.2006,  11:26 Найти цитируемый пост)
Какой еще "рекурсивный язык" ?

Я не то хотел написать, случайно вырвалось.
PM WWW ICQ   Вверх
Cr@$h
Дата 24.8.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41




M
Cr@$h
Тема выделена из сравнения Python с другими языками.

PM MAIL ICQ   Вверх
Void
Дата 25.8.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Цитата(albertn @  24.8.2006,  14:25 Найти цитируемый пост)
Есть такая замечательная фраза "В чужой монастырь со своим уставом не лезут". Тогда объясни мне, зачем использовать эти конструкции, если он отлично может обходиться своими родными функциями не хуже. Если же их использовать, то зачем тогда вообще писать на лиспе?

А ещё есть мнение, что догматизм — это плохо.

Восторг по поводу функций высшего порядка (mapcar и т.д.) понятен smile , но если какая-то конкретная задача легче решается с помощью императивных возможностей, то нет причин отказываться от них исключительно из идеологических соображений.

Поддержка функционального стиля — не первая и не последняя причина писать на Лиспе smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
albertn
Дата 25.8.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(Void @ 25.8.2006,  00:28)
Цитата(albertn @  24.8.2006,  14:25 Найти цитируемый пост)
Есть такая замечательная фраза "В чужой монастырь со своим уставом не лезут". Тогда объясни мне, зачем использовать эти конструкции, если он отлично может обходиться своими родными функциями не хуже. Если же их использовать, то зачем тогда вообще писать на лиспе?

А ещё есть мнение, что догматизм — это плохо.

Восторг по поводу функций высшего порядка (mapcar и т.д.) понятен smile , но если какая-то конкретная задача легче решается с помощью императивных возможностей, то нет причин отказываться от них исключительно из идеологических соображений.

Поддержка функционального стиля — не первая и не последняя причина писать на Лиспе smile

Не знаю как у тебя, но я при написании какой-либо программы всегда стараюсь, чтобы она была как можно более идеологически правильной. Причем и с точки зрения алгоритма, и с точки зрения идеологии языка.
Ведь согласись, что эти функции для обработки списков и его списочная структура сделали этот язык уникальным! Тогда зачем нарушать его уникальность, и писать на нем, как на обычном языке программирования?
PM WWW ICQ   Вверх
Cr@$h
Дата 25.8.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(albertn @  25.8.2006,  09:50 Найти цитируемый пост)
Ведь согласись, что эти функции для обработки списков и его списочная структура сделали этот язык уникальным! 

Конечно. Просто для каждой задачи квалифицированный программист должен уметь находить оптимальное, или даже элегантное, изящное  решение (первоначальное значение слова хакер). Глупо использовать язык, заточенный под одно, для написания другого. Ещё хуже не использовать для решения задачи язык, который специально для неё создан. Это не догма.
Я работал с Lisp, и он мне не понравился только скобками. Он даёт мощные средства и является чуть ли не "чистым" функциональным языком. Про него не надо ругаться, и, если кто-то любит его, пускай использует в соотв. задачах -- по-моему, только выиграет.
Не все задачи же решаются или, вернее сказать, предназначены для решения на декларативных языках. И бояться императивщины совсем не стоит. Помню в Visual Prolog присваивание никто не хотел видеть, а когда ввели, поняли, что с ним стало только удобнее, а в чистом виде присваивания нет даже.
PM MAIL ICQ   Вверх
svg
Дата 25.8.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2005

Репутация: 14
Всего: 18



Цитата(albertn @  25.8.2006,  08:50 Найти цитируемый пост)
Не знаю как у тебя, но я при написании какой-либо программы всегда стараюсь, чтобы она была как можно более идеологически правильной. Причем и с точки зрения алгоритма, и с точки зрения идеологии языка.


Тогда надо уточнить, идеология какого языка имеется в виду.
Идеология CommonLisp - прагматизм,прагматизм и еще раз  прагматизм.
Идеология Scheme - минимализм, а потом все остальное.

Если бы язык пытался следовать именно функциональному стилю, то в первую очередь в нем бы отсутствовали или были
сильно ограничены мутирующие объекты и присваивание. Пример - Erlang.

Странно было бы причислять CommonLisp к  сугубо функциональным языкам, если даже goto (go) присутствует в спецификации
в явном виде.


Цитата(albertn @  25.8.2006,  08:50 Найти цитируемый пост)
Ведь согласись, что эти функции для обработки списков и его списочная структура сделали этот язык уникальным! Тогда зачем нарушать его уникальность, и писать на нем, как на обычном языке программирования? 


Уникальноть Лисп - отсутствие синтаксиса и макросы. Мощное сочетание и основная причина его использования.
PM MAIL   Вверх
albertn
Дата 25.8.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(Cr@$h @  25.8.2006,  12:28 Найти цитируемый пост)
Не все задачи же решаются или, вернее сказать, предназначены для решения на декларативных языках. И бояться императивщины совсем не стоит. Помню в Visual Prolog присваивание никто не хотел видеть, а когда ввели, поняли, что с ним стало только удобнее, а в чистом виде присваивания нет даже. 

В прошлом семестре на одном из предметов нам препод прогружал, что использование циклов, ифов, и всего остального, что насильно было в лисп вставленно, глупо и не правильно, т.к. все это можно сделать и оригинальными лисповскими функциями. Я понимаю когда в языки программирования разрешают вставлять ассемблерные коды, но такой подход у меня ассоциируется с использыванием goto, к который у меня вызывает отвращение.
PM WWW ICQ   Вверх
Cr@$h
Дата 25.8.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(albertn @  25.8.2006,  13:38 Найти цитируемый пост)
Я понимаю когда в языки программирования разрешают вставлять ассемблерные коды, но такой подход у меня ассоциируется с использыванием goto, к который у меня вызывает отвращение. 

Интересная ассоциация.

В любом случае, если ты хочешь соответствовать идеологии, то можешь писать истинно функционально, не используя "навороты" из императивных языков. Но, думаю, ввели некоторые для облегчения написания и читаемости кода. А без этого в индустрию, например, не пройти. Но я и не говорю, что это надо...
PM MAIL ICQ   Вверх
albertn
Дата 25.8.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(svg @  25.8.2006,  12:33 Найти цитируемый пост)
Если бы язык пытался следовать именно функциональному стилю, то в первую очередь в нем бы отсутствовали или были
сильно ограничены мутирующие объекты и присваивание. Пример - Erlang.

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

Цитата(svg @  25.8.2006,  12:33 Найти цитируемый пост)
Странно было бы причислять CommonLisp к  сугубо функциональным языкам, если даже goto (go) присутствует в спецификации
в явном виде.

А goto, как и все остальные (не свойственные ему) функции к нему прикрепили насильно, дабы дойти до широких масс.

Добавлено @ 12:51 
Цитата(Cr@$h @  25.8.2006,  12:45 Найти цитируемый пост)
В любом случае, если ты хочешь соответствовать идеологии, то можешь писать истинно функционально, не используя "навороты" из императивных языков. Но, думаю, ввели некоторые для облегчения написания и читаемости кода. А без этого в индустрию, например, не пройти. Но я и не говорю, что это надо... 

Просто у каждого языка есть свои гласные и негласные правила, такие как расстановка отступов, именование переменных и функций, а также откуда начинать цикл (0 - Си; 1 - Паскаль), и т.д. Все эти правила каждый может соблюдать и не соблюдать, но я лично, если выбрал выбрал язык, то стараюсь пользоваться правил и рекомендаций авторов и разработчиков стандарта языка.
PM WWW ICQ   Вверх
Cr@$h
Дата 25.8.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(albertn @  25.8.2006,  13:45 Найти цитируемый пост)
Просто у каждого языка есть свои гласные и негласные правила, такие как расстановка отступов, именование переменных и функций, а также откуда начинать цикл (0 - Си; 1 - Паскаль), и т.д. 

Хотя, говорим мы о чём-то более существенном -- отках от императивных конструкций и следование чистому функциональному стилю.
Цитата(albertn @  25.8.2006,  13:45 Найти цитируемый пост)
стараюсь пользоваться правил и рекомендаций авторов и разработчиков стандарта языка. 

И правильно делаешь. Но неужели рядом с императивными конструкциями они приводят рекомендации типа: старайтесь не использовать, или заменяется следующим функциональным кодом. Думаю, как раз стоит обрать внимание как эти люди, к которым ты присушиваешься, отзываются и позиционируют императивные средства, введённые в Lisp.
user posted imageКстати, насколько мне известно, название языка теперь пишут с заглавной буквы, а все остальные -- строчными: Lisp.
PM MAIL ICQ   Вверх
albertn
Дата 25.8.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: нет
Всего: 34



Цитата(Cr@$h @  25.8.2006,  12:58 Найти цитируемый пост)
Хотя, говорим мы о чём-то более существенном -- отках от императивных конструкций и следование чистому функциональному стилю.

Ну несовсем же чистому, а наиболее к нему приблеженному. Хотя имхо это тоже можно считать правилом или пожеланием.

Цитата(Cr@$h @  25.8.2006,  12:58 Найти цитируемый пост)
Но неужели рядом с императивными конструкциями они приводят рекомендации типа: старайтесь не использовать, или заменяется следующим функциональным кодом.

Мне так препод говорил, и утверждал, что это идеологически правильно.
PM WWW ICQ   Вверх
Cr@$h
Дата 25.8.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(albertn @  25.8.2006,  14:40 Найти цитируемый пост)
Ну несовсем же чистому, а наиболее к нему приблеженному. 

Так вот как раз важно понимать, когда использовать императивные средства, делаяя код понятнее и изящнее. Это элемент искусства.
Цитата(albertn @  25.8.2006,  14:40 Найти цитируемый пост)
Цитата(Cr@$h @  25.8.2006,  12:58 )
Цитата

Но неужели рядом с императивными конструкциями они приводят рекомендации типа: старайтесь не использовать, или заменяется следующим функциональным кодом.


Мне так препод говорил, и утверждал, что это идеологически правильно. 

Препды страдают консерватизмом.
Сейчас появляется всё больше гибридов: императивный-декларативный. И будущее, я считаю, как раз за этим. В том же CL много чего уже есть. Да и C# 3.0 обогатят функциональными средствами. Так что нужно идти в ногу со временем, выбирать для себя оптимальное сочетание средств, получая удовольствие от программирования и находясь в гармонии с языком. Слушай свой опыт и пиши так, как ты бы хотел, чтобы писали другие. Это всё, что ты можешь, и всё, что ты должен.
IMHO
PM MAIL ICQ   Вверх
Void
Дата 25.8.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Цитата(albertn @  25.8.2006,  14:45 Найти цитируемый пост)
А goto, как и все остальные (не свойственные ему) функции к нему прикрепили насильно, дабы дойти до широких масс.

Интересная точка зрения smile Думаю, в те времена едва ли можно было говорить о «широких массах» программистов.
Цитата(albertn @  25.8.2006,  14:45 Найти цитируемый пост)
Я бы не сказал, что он чисто функциональный, т.к. он интерпретатор, способный изменять свой код находу.

Ну, во-первых, HiPE. Во-вторых, я бы сначала сослался не на возможность горячей замены кода, а на наличие побочных эффектов функций (в виде обмена сообщениями, словаря процесса и т.д.).
А впрочем, какая суть разница, чистый или не чистый? Язык должен решать свои задачи, и у Erlang это получается весьма успешно.
Цитата(albertn @  25.8.2006,  10:50 Найти цитируемый пост)
Ведь согласись, что эти функции для обработки списков и его списочная структура сделали этот язык уникальным! Тогда зачем нарушать его уникальность, и писать на нем, как на обычном языке программирования? 

Не соглашусь. Вот поэтому:
Цитата(svg @  25.8.2006,  14:33 Найти цитируемый пост)
Уникальноть Лисп - отсутствие синтаксиса и макросы. Мощное сочетание и основная причина его использования. 

Цитата(albertn @  25.8.2006,  10:50 Найти цитируемый пост)
Не знаю как у тебя, но я при написании какой-либо программы всегда стараюсь, чтобы она была как можно более идеологически правильной. 

Программа должна удовлетворять заданным функциональным требованиям и быть по возможности лёгкой в сопровождении. Остальное вторично и следует из этих требований. Часто следование идеологии языка способствует достижению этих целей. Но рассматривать её как самоцель я бы не стал.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Cr@$h
Дата 25.8.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



По-моему, не наджо вообще на идеологии зацикливаться. Что на ней свет клином сошёлся. Пиши программу, чтобы она была удобной, выдерживай хороший стиль, но следовать только функциональной парадигме не за чем. Если язык предоставляет множество средств, то научись использовать их все и эфективно в каждом конкретном случае, тогда добьёшься лучших результатов с этим языком. Сейчас много парадигм и многие живут очень долго, показывая свою востребованность. Объединение или совмещение их лучших идей и положений представляется естественным путём эволюции языков.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0928 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.