LINUX.ORG.RU

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


0

0

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

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

Спасибо :)

★★★

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

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

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

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

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

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

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

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

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

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

ukez ()

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

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 ()
Ответ на: Re: Языки программирования от anonymous

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

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

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

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

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

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

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

> 9 - да

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

uj2 ★★★ ()
Ответ на: Re: Языки программирования от uj2

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

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

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

anonymous ()
Ответ на: Re: Языки программирования от anonymous

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

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

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

uj2 ★★★ ()
Ответ на: Re: Языки программирования от uj2

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

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

anonymous ()

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

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

anonymous ()

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

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

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

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

DonkeyHot ★★★★★ ()
Ответ на: Re: Языки программирования от uj2

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

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

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

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

anonymous ()

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

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 ()
Ответ на: Re: Языки программирования от Mauhuur

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

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

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

WFrag ★★★★ ()
Ответ на: Re: Языки программирования от Mauhuur

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

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

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

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

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

> SICP

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

uj2 ★★★ ()

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

2uj2

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

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

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

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

Die-Hard ★★★★★ ()
Ответ на: Re: Языки программирования от Die-Hard

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

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

Mauhuur ()
Ответ на: Re: Языки программирования от Mauhuur

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

2Mauhuur:

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

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

2 uj2:

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

Die-Hard ★★★★★ ()
Ответ на: Re: Языки программирования от Die-Hard

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

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

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

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

uj2 ★★★ ()
Ответ на: Re: Языки программирования от uj2

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

uj2 :

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

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

Die-Hard ★★★★★ ()
Ответ на: Re: Языки программирования от Die-Hard

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

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

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

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

uj2 ★★★ ()
Ответ на: Re: Языки программирования от uj2

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

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

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

Die-Hard ★★★★★ ()

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

> 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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.