[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: kylix 2





Dmitry Astapov wrote:

 AS> Эти операторы (for, while, switch...) я не учитывал. Я говорил о ++,
 AS> --,
 AS> +, -, +=, *=, new, ... Да, for тоже оператор, я это забыл.

Т.е. все операторы равны, но некоторые "равнее". Что я и хотел показать. В
функциональных языках все функции равны в правах, и могут быть свободно
переданы как параметры, возвращены в качестве результата, могут участвовать
в качестве аргументов в выражениях.


AS> Знаете, тут применима, в принципе, та же идея, что и в споре об
AS> определении, что такое программа (помните? :-).

[skip]
И как же тут применима эта идея?


Была применима... :-) Изначально, насколько я понял, "играли" двумя терминами: "структурные" и функциональные языки программирования.

Их истинного (подразумеваемого) значения в данном контексте я не понял, поэтому, считая, что "языки структурны, потому что оперируют структурами данных" и что языки функциональны, когда описывают четкие функции программы (я подменил это понятие понятием процедурного метода программирования), я и использовал эту идею, которая подходила под то, как я понял тему. :-)

Вопрос - является ли, с вашей точки зрения, наличие first-class functions
характерной чертой функциональных языков программирования? А то, сдается,
нету единства в толковании терминов.

 AS> Может быть. :-) Я неясно выразился. И не до конца понял вопрос... :-)

Если в языке функции "равны в правах" с данными - т.е. их можно свободно
перевать, возвращать, создавать и т.п., то они являются first-class
citizens. Это устоявшийся оборот такой :)

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


Стуктурные (более верно, имхо, говорить все же "императивные") языки
называются так не потому, что позволяют описывать структуры данных.


Кстати, я имел в виду все же не совсем то. :-) Не так банально. По Страуструпу, например, это называется программированием "абстракции данных", то есть, грубо говоря, программированием с объединением данных одного класса (понятие "классы" здесь не то, что в С++ - более общее). Вот это я и имел в виду.


 AS> functional programming
 AS> This style of programming proceeds by computing new values from
 AS> existing values without changing any of the existing values.

 AS> imperative programming
 AS> This style of programming proceeds by altering values stored in variables.

 AS> Т.е. функциональное программирование - это вычисление новых значений
 AS> без изменения существующих переменных, императивное - посредством
Я бы сказал, что у чисто функциональных языков остуствует понятие
"переменной" вообще. Это было бы точнее.

А есть такие чисто функциональные языки?

Кстати, не свзяано ли это с понятием "чисто функции" (pure function)? (Чтобы тут потом тоже не придумывать несуществующие связи)

AS> "более структурный". Хотя, с другой стороны, мне кажется довольно
AS> очевидным, что, например, C является более ориентированным (читай:
AS> припособленным) на функциональное программирование, чем, скажем, C++
AS> или Python.
И как на C правильно реализуется map и fold? А так, чтобы было
type-safe? А
рекурсивные функции? А с tail-recursive оптимизацией?

 AS> Тут должно быть понятно, что я подменил значения терминов. Я имел в
 AS> виду процедурное, структурное и объектно-ориентированное
 AS> программирование (методы разработки программ).  Совершенно разные вещи.
Т.е. в вышеприведено абзаце следует читать "C является более
ориентированным на процедурное программирование"? Я правильно понял?

Да, в противовес С++ и Java, которые созданы для объектно-ориентированного программирования.

--
Andrei Sosnin
http://zzx.ath.cx

 <!-- : it all depends on your vision : -->



Reply to: