LINUX.ORG.RU

Языки программирования


0

0

Вопросы, наверно, ламерские. Объясните плз:

1) чем различаются ФЯ от ИЯ?
2) выносятся ли декларативные языки в отдельную группу ЯП?
3) являются ли регекспы ЯП?
4) что почитать толкового и не слишком сложного (ну и не слишком легкого, хотя тут такого, наверное, нету) на тему ЯП, классификации ЯП, формальных грамматик и т.п.?
5) Лисп -- функциональный язык?
6) В Лиспе есть "последовательность вычислений" (вроде (ф-я1 ...)\n(ф-я2 ...)? Я просто его сейчас учу и не дошел пока до более-менее сложных программ %)
7) Какие особенности нужно учитывать при программировании на Лиспе?
8) Что стоит почитать по Лиспу (сейчас читаю "Gentle Introduction ..." Турецкого, он мне более-менее понятен)?
9) я не задолбал вопросами? ;)

Спасибо :)

★★★

1) Наверное принципом управления последовательностью выполнения операторов ( как следствие языковыми примитивами )

2) Общеприятое мнение не знаю. Мое мнение - декларативные языки имеют отличное от ИЯ и ФП устройство.

3) хз. смотря что ты понимаешь под языком вообще и языком программирования в частности.

4) По ЯП - Роберт Себеста. Основыне концепции языков программирования + еще такая черная книженция не помню как называется. А вообще много всякой переводной литературы. По основам построения трансляторов - книга с драконом (Компиляторы: принципы, технологии и инструментарий Альфред В. Ахо, Рави Сети, Джеффри Д. Ульман)

5) ага (бытует такое мнение)

6) вопрос не по существу. если есть функция с переменным числом параметров значит есть и возможность писать что то вроде (block (f1 x1) (f2 x2) .... ) А в лиспе она есть.

7) ну ты же понимаешь как трудно на это ответить :)

8) На практике я с лиспом сталкиваюь только в емаксе потому читаю доку по Emacs Lisp. Вообще язык простой и такой доки для начала вполне хватает :)

9) ага. достал.

ukez
()

1 - в ФЯ используются "математические" функции - без побочных эффектов (изменения состояния "внешего мира"). более того, чистое ФП не признаёт даже изменения значения переменных, так как это тоже создаёт "текущее состояние". В чистой ФП программе нет необходимости думать о состояниях при осмыслении кода - он становится подобен набору формул, каждая из которых работает сама по себе, а порядок исполнения не важен. Однако далеко не для всех задач такое представление адекватно..

2 - да 3 - cкорее нет чем да, это выражения, они пассивны 4 - хз, "Concepts, Techniques, and Models of Computer Programming" Peter Van Roy (google,p2p) 5 - мультипарадигмный (то есть он настолько абстрактен что поддерживает всё что хочешь=) 6 - есть, вроде progn называется... 7 - хз, то что для многих задач питон более сподручен.. 8 - хз, "On Lisp" Paul Graham 9 - да

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

> в ФЯ используются "математические" функции - без побочных эффектов

а что, например, на этом можно написать? Я, честно говоря, себе таких задач не представляю. Можешь пример привести? :)

> 3 - cкорее нет чем да, это выражения, они пассивны

ну это ж все-таки формальная грамматика какого-то там рода, разве не любая ФЯ является ЯП?

> 6 - есть, вроде progn называется...

а вот, например (defun fun1 (x) (fun1 x) (fun2 x)) [вчера про это прочитал] -- это ж и есть "последовательность вычислений"? т.е. когда мы все предыдущие функции юзаем из-за side effect, и только последнюю из-за возвращаемого значения?

> 9 - да

ну, еще немного %)

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

> т.е. когда мы все предыдущие функции юзаем из-за side effect,

Не должно быть таких опасных функций...

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

> Не должно быть таких опасных функций...

не, я к тому, что если переносить это на глобальный контекст, то и получаем, собственно, эту самую последовательность выполнения. Или как?

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

Если нет побочны эффектов - нет и разницы какую функцию подставлять первой.

anonymous
()

По лиспу советую почитать "Мир Лиспа". Русский перевод где-то в сети есть.

anonymous
()

>1) чем различаются ФЯ от ИЯ?

Ортогональные понятия. ИЯ - задающий последовательность действий. "Антоним" - декларативный.

Есть мнение, что Haskell - лучший империтивный язык(в c.l.f читал:-). Лисп, вроде тоже, весь империтивный.

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

>> в ФЯ используются "математические" функции - без побочных эффектов

> а что, например, на этом можно написать? Я, честно говоря, себе таких задач не представляю. Можешь пример привести? :)

например вычислить код html-страницы по содержимому запроса.
помнится store.yahoo.com был написан на лиспе

anonymous
()

1. Чистые функциональные языки семантически тождественны лямбда-исчислению + одной из моделей вычислений - либо энергичной (eager), либо одной из ленивых форм редукции графов. Как правило, языки не чистые - то есть, они содержат все элементы императивных языков (мутабельные переменные и условные переходы) и одновременно предоставляют возможность использования одной из функциональных моделей.

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

3. В свете 2., регекспы таки являются языком. Как правило - не Т-полными, но если дополнить их операцией замены, то получим классическую машину Маркова - то есть, вполне полноценный язык с Т-полной семантикой.

4. На русском - Филд, Харрисон. Остальные ссылки тут уже были...

5. Лисп - императивный язык с НЕКОТОРЫМИ функциональными возможностями (то есть - eager lambda, но без карринга).

6. Последовательность - конечно же есть, ведь Лисп - императивный язык, и в нём возможны сайд-эффекты. E.g.,

(progn (print "Doing something") (do-something))

7. Шибко ёмкий вопрос. Учитывать для ЧЕГО?

8. SICP, On Lisp

9. Вопросы - дело хорошее. Но лучше с ними в USENET - там народу знающего больше.

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

>одной из моделей вычислений - либо энергичной (eager), либо одной из ленивых форм редукции графов

Не подкинешь чего стоит изучить по моделям вычислений?

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

Спасибо! Бум разбираться :)

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

> 7. Шибко ёмкий вопрос. Учитывать для ЧЕГО?

Вопрос пока отпадает, надо сначала разобраться КАК %)

> 9. Вопросы - дело хорошее. Но лучше с ними в USENET - там народу знающего больше.

А какие группы посоветуете? comp.lang.что-нибудь или что-то из русского fido7?

> SICP

Это вот это -- "Structure and Interpretation of Computer Programs"?

uj2 ★★★
() автор топика

2uj2

> 3) являются ли регекспы ЯП?

Только не ляпни на экзамене, что являются; это -- ортогональные понятия. ПрофессорА любят такие вопросы задавать, типа "Повышает ли смазка КПД машины Карно?"

Регекспы -- способ описания регулярных языков, т.е. _формальных_ языков, соответствущих грамматикам типа 3 в иерархии Хомского. Это чисто синтаксическое понятие. А ЯП еще и семантику включают.

Пример: Международная азбука Морзе (с пробелами) является регулярным языком. Очевидно, ЯП она не является.

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

Не шути так. Регулярное выражение, по сути - система уравнений. Так что семантика у него очень даже есть. Иди, читай у Рейнольдса, что такое язык.

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

2Mauhuur:

> Регулярное выражение, по сути - система уравнений. Так что семантика у него очень даже есть.

INHO твое понимание вопроса весьма ограниченно.

2 uj2:

Ладно, попробуй, скажи на экзамене, что регекспы являются языком программирования. Потом вернись сюда и расскажи Mauhuur'у, что ты об этом думаешь.

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

IMHO, ограничен ты. Я тебе приказал - читай Рейнольдса, ламер.

Mauhuur
()
Ответ на: комментарий от Die-Hard

> Ладно, попробуй, скажи на экзамене, что регекспы являются языком программирования. Потом вернись сюда и расскажи Mauhuur'у, что ты об этом думаешь.

с чего ты взял, что это на экзамен? %) Я для себя интересуюсь.

Кстати, тут упоминался Хомский, а у меня (вернее, не у меня, но могу взять) случаем залежалась книжка хомского по ФГ. Кто что может про нее сказать? %)

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

uj2 :

> Я для себя интересуюсь.

Тогда не слушай _все_, что тебе Mauhuur говорит. У него тенденции к очень категорическим высказываниям, при довольно ограниченных представлениях, которые он вынес, в основном, из функционального программирования (хотя часто он дело говорит).

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

> Тогда не слушай _все_, что тебе Mauhuur говорит

ну, я лучше _всех_ послушаю, а потом почитаю книжек %)

Так все-таки, что насчет хомского, стоящая книжка?

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

> Так все-таки, что насчет хомского, стоящая книжка?

Я не читал. Но, думаю, она может представлять собой только исторический интерес. Он, все же, лингвистом был, и писАл давно. Хотя умный чел, вроде...

Die-Hard ★★★★★
()

> 1) чем различаются ФЯ от ИЯ?

Фундаментальное отличие ФЯ от Ия - отсутствие сторонних эффектов (переменные получают свои значения и никогда их не меняют), если речь идет о чисто функциональных языках, таких как Haskell, Clean, etc. Это упрощает верификацию программ, так как результат функции зависит только от ее аргументов, в нее не может передаваться глобальное состояние, влияющее на результат.

2) выносятся ли декларативные языки в отдельную группу ЯП?

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

3) являются ли регекспы ЯП?

Языком - очевидно являются, программирования - сомневаюсь, так как это скорее приложение к языкам программирования.

4) что почитать толкового и не слишком сложного (ну и не слишком легкого, хотя тут такого, наверное, нету) на тему ЯП, классификации ЯП, формальных грамматик и т.п.?

Слишком общий вопрос. Может Google ?

5) Лисп -- функциональный язык?

Нет. Лисп - язык поддерживающий множество парадигм, включая функциональное программирование. В какой-то мере Лисп функциональный язык, но может спокойно выходить за рамки ФП.

6) В Лиспе есть "последовательность вычислений" (вроде (ф-я1 ...)\n(ф- я2 ...)? Я просто его сейчас учу и не дошел пока до более-менее сложных программ %)

В Лиспе формы выполняются/оцениваются последовательно, так же как и в других императивных языках. Внутри форм let progn block defun и т.п. формы выполняются в строгой заданной последовательности. Но это можно менять макросами. Например, в форме let считается присваивание идет параллельно и может быть именно так в какой-нибудь реализации Common Lisp, идущие после присваиваний формы выполняются последовательно.

Пример: (let ((a 3)) (+ (setf a (+ a 2)) (setf a (* a 2))))

Чему равен результат этого выражения ? Правильно - 15. Сначала присвоили a число 5 - (setf a (+ a 2)), результатом присваивания является число, которое мы присваивали, то есть 5.

Затем умножили новое значение а на 2 и получили 10.

Затем произошло сложение.

Равносильный пример на Си.

int a = 3; int b = a + 2; int c = b * 2; int result = b + c

7) Какие особенности нужно учитывать при программировании на Лиспе?

а) Лучше придерживаться функционального стиля.

б) Не фанатеть от преждевременной оптимизации,

в) при этом не забивать сборщик мусора дохлыми ячейками списков без необходимости (меньше консить).

г) Пользоваться макросами активнее, но с чувством меры (почитать OnLisp по ссылке ниже).

Список конечно не полный и написан "на вскидку".

8) Что стоит почитать по Лиспу (сейчас читаю "Gentle Introduction ..." Турецкого, он мне более-менее понятен)?

Во первых спецификация Common Lisp http://www.lispworks.com/documentation/HyperSpec/index.html, но прямо по ней язык изучать не рекомендуется.

Свежая книга Practical Common Lisp (даже еще не вышла в печать): http://www.gigamonkeys.com/book/

Еще хорошая обучающая книга Successful Lisp: http://psg.com/~dlamkins/sl/contents.html

Книга, в основном посвященная уникальным возможностям макросов Common Lisp: http://www.paulgraham.com/lib/paulgraham/onlisp.pdf там кстати реализация пролога описана.

В общем, рекомендуется почитать статейки на сайте Пола Грэхэма: http://www.paulgraham.com/articles.html и в частности http://www.paulgraham.com/avg.html

Реализацию Common Lisp для обучения IMHO лучше брать на www.lispworks.com (одна из самых известных и зрелых реализаций) или http://www.cormanlisp.com (небольшая но впечатляющая реализация под Windows с хорошим интерфейсом для взаимодействия с ОС и компилятор нелохой).

9) я не задолбал вопросами? ;)

Это разве вопросы ;-)

С наилучшими пожеланиями Lisper

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