?

Log in

Почему LISP? - Жить не можем без проблем! [entries|archive|friends|userinfo]
Жить не можем без проблем!

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Почему LISP? [Jan. 13th, 2011|02:05 pm]
Жить не можем без проблем!

ru_lisp

[aralex]

Как говорил Ворошилов, вопрос к Знатокам (к знатокам LISP-а в данном случае)! Почему таки LISP? Или, если конкретнее, вопроса три:

  1. Для каких именно задач LISP подходит больше, чем другие языки?
  2. За счёт чего для них он подходит больше?
  3. В чём именно выражается его преимущество?

Если не в лом, приведите, pls, коротенькие иллюстрации на LISP-е (или ссылочку на них). Заранее благодарен!

Исходно данный пост был размещён в сообществе ru_programming, но там Знатоков, способных ответить внятно и по сути, увы, не нашлось :(

linkReply

Comments:
From: (Anonymous)
2011-01-18 12:19 pm (UTC)
"Я говорю об общепринятом понимании этого термина."

А я спрашиваю - общепринятым кем? Ощепринятым где?

"Декларативность предполагает работу с данными, а не с процессом их обработки."

Ну так и получается, если от пути вычисления результат не меняется - смысл с ним работать тогда? Только для оптимизации, в среде выполнения.

"Никакого ограничения на модель вычисления тут нет."

Ограничение на модель вычислений таки есть - если у нас полнота по Тьюрингу, есть _|_ и это влияет на семантику.

"Да и вообще - какая модель вычисления у XML, например?"

А тут нет тьюринг-полноты, нет _|_ а потому любая. Как его не вычисляй - результат не поменяется. И понятно, от пути вычисления зависимости нет.

"А ведь это один из лучший примеров декларативности."
Я так не думаю. Рассуждать о декларативности применительно к чисто описательным, неполным по тьюрингу языкам совсем не интересно - слишком просто все.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-19 03:34 am (UTC)
> А я спрашиваю - общепринятым кем? Ощепринятым где?

Ну вы не стесняйтесь, напишите в гугле "декларативное программирование" и почитатайте определения.

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

А смысл не работать? Это же просто способы описания. Можем описывать так, можем эдак.

> Ограничение на модель вычислений таки есть

Нету. Энергичная модель вычислений не мешает никак работать с данными вместо процессов.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-19 07:40 am (UTC)
"напишите в гугле "декларативное программирование" и почитатайте определения"

Ага. У вас уже вместо одного общепринятого определения получилось несколько определений. Ну ладно. Первый результат поиска - статья в Википедии. И в русскоязычной и в англоязычной версиях определений несколько, и там и там названное мной определение есть. Недостатки определения, которое я критиковал понятны: субъективность и бессодержательность. Вкусные томаты вкусные, декларативная программа декларативная. Дальше что?

"А смысл не работать?"

А смысл в том, что это прогресс - можно не работать, когда работать не нужно.

"Энергичная модель вычислений не мешает никак работать с данными вместо процессов"

Во-первых мешает, потому как энергичная модель неполна по тьюрингу. Можно ей пользоваться только в сочетании с ленивой моделью. А во-вторых, речь не столько о том, что "мешает", сколько о том, что при вычислении ленивым и энергичным образом результат может получиться разным, но если мы зафиксируем модель вычислений - от порядка результат уже не поменяется.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-19 12:15 pm (UTC)
> Первый результат поиска - статья в Википедии. И в русскоязычной и в англоязычной версиях определений несколько, и там и там названное мной определение есть.

> In computer science, declarative programming is a programming paradigm that expresses the logic of a computation without describing its control flow.э

> Согласно первому определению, программа «декларативна», если она описывает каково́ нечто, а не как его создать.

> Согласно второму определению, программа «декларативна», если она написана на исключительно функциональном, логическом или константном языке программирования.

И где ваше определение?

> Во-первых мешает, потому как энергичная модель неполна по тьюрингу.

Прекрасно, машина тьюринга - тьюринг-неполна. Этот результат тянет на докторску, как минимум.

> А смысл в том, что это прогресс - можно не работать, когда работать не нужно.

Ну и где же вы при энергичном порядке вычислений совершаете бОльшую работу?

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

Ну и что?
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-19 12:37 pm (UTC)
"И где ваше определение?"

http://en.wikipedia.org/wiki/Declarative_programming#Definition
1) A program that describes what computation should be performed and not how to compute it

Это определение ваше. Согласно ему декларатинная программа декларативна. Смысла в нем столько же, сколько в определении "веревка - это вервие простое".

2) Any programming language that lacks side effects (or more specifically, is referentially transparent)

Это мое определение.

3) A language with a clear correspondence to mathematical logic.

Это, на самом деле, тоже мое но в несколько завуалированной форме.

"Прекрасно, машина тьюринга - тьюринг-неполна."

Ну разумеется нет. Просто какое она имеет отношение к "энергичной модели", то есть аппликативному порядку?

"Ну и что?"

То, что и при декларативности нельзя в общем случае говорить "Никакого ограничения на модель вычисления тут нет". Потому что есть.
(Reply) (Parent) (Thread)