Re: kylix 2
Evening, Andrei.
Andrei Sosnin <demonsly@hot.ee> 17:56 8/1/2003 wrote:
>> в принципе да, tcl функциональный язык - каждый оператор на самом деле
>> является функцией. Если не задумываться об этом, все таки синтаксис
>> у tcl и например Си похож
AS> В С++ тоже каждый оператор является функцией... Но он все равно больше
AS> "структурный", чем функциональный.
Мда? Какие аргументы у оператора for, например? Действительно ли это
функция? какие значения она возвращает? Можно ли передать ее в качестве
аргумента в другую функцию, например так:
void foo(void* fun) { (*fun)(i=0;i<10;i++) {...} };
main() { foo(for); }.
AS> Знаете, тут применима, в принципе, та же идея, что и в споре об
AS> определении, что такое программа (помните? :-).
Нет. Можно напомнить?
AS> Функциональность или "структурность" языков программирования - это
AS> чистые абстракции. Без функциональности (да-да, именно: я имею в виду
AS> ориентированность на функциональное программирование) любой язык
AS> программирования становится языком структуризации данных (как,
AS> например, XML, SGML, HTML, TeX, ...). То есть, по крайней мере,
AS> функциональными языками являются все языки программирования, как TCL,
AS> Python, C, C++, Lisp, JavaScript: они включают в себе такую
AS> возможность -
AS> программирование функций.
У вас, простите, каша в голове :)
Вопрос - является ли, с вашей точки зрения, наличие first-class functions
характерной чертой функциональных языков программирования? А то, сдается,
нету единства в толковании терминов.
AS> Любой нормальный язык программирования также является структурным
AS> языком, потому что так или иначе включает в себя определение структур
AS> данных - переменных, массивов, структур, объектов... Это все структуры
AS> данных.
Стуктурные (более верно, имхо, говорить все же "императивные") языки
называются так не потому, что позволяют описывать структуры данных.
AS> Вероятно, вопрос заключается в том, на что данный язык более сильно
AS> ориентирован, и тут уже можно долго и упорно спорить, ибо слишком
AS> сложным оказывается сравнение, например, C++ и Python - который из них
AS> "более структурный". Хотя, с другой стороны, мне кажется довольно
AS> очевидным, что, например, C является более ориентированным (читай:
AS> припособленным) на функциональное программирование, чем, скажем, C++
AS> или Python.
И как на C правильно реализуется map и fold? А так, чтобы было type-safe? А
рекурсивные функции? А с tail-recursive оптимизацией?
ЗЫ
Пост-фактум прошу прощения за то, что письмо состоит из одних "каверзных"
вопросов. Но я не ставил себе целью объяснить - скорее, зародить сомнение :)
--
Dmitry Astapov //ADEpt E-mail: adept@umc.com.ua
GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498 2B08 7867 4860 F5D7 639D
Reply to: