LINUX.ORG.RU

Не понимаю, что такое замыкание (closure)

 ,


5

6

Если почитать SICP, то замыкания - это такое свойство функции, что, например, «мы говорим, что операция объединения данных обладает замыканием в том случае, если результаты объединения этой операции могут объединяться этой же операцией». Поэтому я думал, что суть примера с языком описания изображений в том, что это круто, когда наши процедуры обладают этим свойством - из несложных операций с изображениями мы можем получать сложные, потому что операция над изображением - это изображение.

Но если прочитать вики, то «Замыкание (англ. closure) в программировании — функция, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции и не в качестве её параметров (а в окружающем коде).» Ну и что? Получается просто, что процедура использует глобальные переменные, ничего примечательного тут вроде и нет.

Так что такое замыкание? Помогите разобраться.

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

А их и сейчас не существует. Планеты - это просто модель какой-то части непознаваемой реальности. Одна из.

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

Если все забыли про то, что некий кусок кода (текст) был процедурой, компилятор потерян - оно уже не процедура. А просто набор символов.

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

Существуют объекты (ну, мы все-таки позитивисты). Что мы их отнесли к планетам - это вопрос нашей внутренней модели Вселенной. Вчера в этой модели Плутон был планетой. Сегодня перестал им быть (если говорить об «усредненной модели научного сообщества»). Объект конкретный есть. Привесить на него бирочку «планета» - это наша блажь. И он не был планетой до того, как кто-то не придумал модель, где существует термин «планета».

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

В том числе.

Разумеется. Но процедурой он становится когда есть что-то (человек или сотворенное человеком), что согласно воспринимать его как процедуру.

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

Не нравится слово «объекты» - можно «сущности». Выбирайте слово на вкус. Как обозначение чего угодно, существующего помимо нашего сознания.

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

Что ты не распарсил? По твоей логике, за сто лет до использования процедур использовали очевидный метод декомпозиции программ, но процедурой его не называли. Значит, процедуры тогда не использовали.

Точно так же, Ферма когда заметку свою на полях написал, он же ее не называл «теорема Ферма», да еще и «великая»? Не называл. Значит, это не была теорема Ферма. Значит, Ферма не формулировал теорему Ферма.

А «Лунную сонату» написал не Бетховен. Не знаю даже, кто ее написал.

Вообще, если X придумал/сделал Y, но называл его как-то по-другому, то на самом деле X не придумал никакого Y. Так-то!

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

Вообще, если X придумал/сделал Y, но называл его как-то по-другому, то на самом деле X не придумал никакого Y. Так-то!

Дурак что-ли?

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

Чтобы процедура на языке Х появилась - нужно, чтобы хоть один человек знал про этот язык

Ой, да тут выездная сессия дурдома, не буду вам мешать.

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

Вообще, если X придумал/сделал Y, но называл его как-то по-другому, то на самом деле X не придумал никакого Y. Так-то!

Чушь. Он мог называть это как угодно. Но он должен описать это достаточно конкретно, чтобы было понятно, что речь идет о сущности Y, а не о каких-то других сущностях. Он мог называть ее Y0, но если определения Y0 и Y тождественны - само слово не имеет значения. Но определение должно быть, достаточно четкое.

ЗЫ Кстати, Лунную сонату Бетховен не очень написал, вроде как. Мало того, что ей имя дали такое, о котором Бетховен и не думал - так еще ее и исполняют так, как придумали сильно позже Бетховена, его версия исполнения достаточно отличается от привычной. Есть такое мнение...

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

Чушь.

Так я и пытаюсь тебе объяснить, что это чушь.

ЗЫ Кстати, Лунную сонату Бетховен не очень написал, вроде как. Мало того, что ей имя дали такое, о котором Бетховен и не думал

Так о чем и речь. Раз имя дали после Бетховена - значит ее написал не Бетховен. А кто-то другой. А великую теорему Ферма сформулировал не Ферма. И так для любого случая, когда Х сделал Y, но не дал названия (или название позже поменяли).

Он мог называть ее Y0, но если определения Y0 и Y тождественны - само слово не имеет значения. Но определение должно быть, достаточно четкое.

Ну так на практике никогда никто никаких четких определений не дает. Вот Ферма не давал никаких четких определений своей теореме, например. Это уже не говоря о том, что само понятие «теорема» смысл весьма сильно меняло со временем.

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

Существует только вселенная(и то не факт, но это к делу не относится). Вся и сразу.

Все остальные сущности существуют только в твоем сознании и являются результатом деятельности мозга.

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

Вот Ферма не давал никаких четких определений своей теореме, например

Оно было достаточно четким, чтобы ее назвали его именем.

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

И чьим именем назвали понятие процедуры?

Еще раз, почему лунную сонату написал Бетховен, великую теорему Ферма сформулировал Ферма, а процедуры начала использовать не Ада Лавлейс?

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

Умиляют гадающие по аватаре.

При чем тут аватара?

При чем тут патенты???

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

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

То есть смотри, Ферма описал некую последовательность утверждений, потом эту последовательность утверждений назвали «Великая теорема Ферма» и говорят, что ее написал Ферма.

Бетховен описал некоторую последовательность звуковых соотношений, потом ее назвали «Лунная соната» и говорят, что ее написал Бетховен.

Ада описала некоторую последовательность операций, потом ее назвали «процедура», и значит можно говорить, что ее написала Ада.

Так? Где ошибка?

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

процедуры начала использовать не Ада Лавлейс?

А она сама как-то эту сущность называла? Пусть не процедура. Как некий реюзабельный в некоторой мере самодостаточный кусок кода?

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

Ада описала некоторую последовательность операций

Ада говорила про модульность? Применимость в разных контекстах?

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

А она сама как-то эту сущность называла?

Да у нее и кода-то не было, перфокарты же. «последовательность операций», как-то так.

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

Модульность со структурным программированием никак не связана, это совершенно ортогональный концепт. Что до применимости в разных контекстах - у нее весьма абстрактный подход, я же выкладывал определение операции. Сама аналитическая машина вообще by-design полиморфна (все операции имели смысл как над числами так и над переменными, то есть оно должно было уметь не только в вычисления но и в компьютерную алгебру, а любая программа (последовательность карт) давала не только численный результат но и формулу) и Ада обращала внимание на абстрактность операций и на тот факт, что их смысл всегда можно заменить (ну те же карты сунуть в немного другую машину). Ну и описания все основаны на переменных, которые всегда можно заменить (и поменять контекст, соответственно). То есть если у тебя карты «загрузить V_1, загрузить V_5, сложить», то оно используется в контексте любых V_1/V_5, очевидно.

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

Логика у всех у нас одна. А приплетать к этому патенты - БСК.

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

Без мата. Я ко всему прочему еще и модератор.

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

То есть если у тебя карты «загрузить V_1, загрузить V_5, сложить», то оно используется в контексте любых V_1/V_5, очевидно.

Это нам сейчас очевидно. Я хочу ясных подтверждений, что это было столь же очевидно Аде - возможность использовать один и тот же кусок кода в разных контекстах.

svu ★★★★★
()

Пацаны ваще загнались.

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

A method was devised of what was technically designated backing the cards in certain groups according to certain laws. The object of this extension is to secure the possibility of bringing any particular card or set of cards into use any number of times successively in the solution of one problem.

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

Это нам сейчас очевидно. Я хочу ясных подтверждений, что это было столь же очевидно Аде - возможность использовать один и тот же кусок кода в разных контекстах.

Ты придуриваешься или как? Это же и была цель разработки аналитической машины - уметь проводить расчеты на разных входных данных.

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

Алсо, вот: Wherever a general term exists, there will be a recurring group of operations, as in the above example. Both for brevity and for distinctness, a recurring group is called a cycle. A cycle of operations, then, must be understood to signify any set of operations which is repeated more than once. It is equally a cycle, whether it be repeated twice only, or an infinite number of times; for it is the fact of a repetition occurring at all that constitutes it such. In many cases of analysis there is a recurring group of one or more cycles; that is, a cycle of a cycle, or a cycle of cycles.

Почему for появился только через 100 лет? А хрен его знает.

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

Виноват, перепутал. Там да, планировались панчкарты.

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

Конечно, достаточно близко к определению процедуры... Если бы только оно еще существовало в реальности, АЕ же вроде так и не построили... Ок, под давлением улик готов признать Аду в каком-то смысле праматерью ПП - но без поддержки средствами языка. Теперь следующий вопрос - когда поддержка сущности процедуры (или какого угодно аналога - реюзабельного фрагмента кода) появилась в компьютерном языке?

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

Ну для факториальщиков-дебилов, конечно, не нужна. А для людей, которые решают реальные задачи - нужна, вполне. Ведь функция без семантики никакой полезной работы не совершает и никакой задачи, соответственно, решать не может.

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

Если бы только оно еще существовало в реальности, АЕ же вроде так и не построили...

А машину тьюринга тоже, внезапно, не построили. Более того - ее никто и не собирался строить.

Ок, под давлением улик готов признать Аду в каком-то смысле праматерью ПП - но без поддержки средствами языка.

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

Теперь следующий вопрос - когда поддержка сущности процедуры (или какого угодно аналога - реюзабельного фрагмента кода) появилась в компьютерном языке?

Дай формально строгое определение компьютерного языка.

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

Более того - ее никто и не собирался строить.

АЕ-то собирались. И программировать на ней реально тоже думали...

Потому что потом писали для машины, а Ада писала - для людей.

Поэтому Жюль Верн придумал современную подводную лодку...;) Он просто не собирался ее строить!

формально строгое определение компьютерного языка.

http://ru.wikipedia.org/wiki/Язык_программирования
Достаточно строгое определение ЯП (в моем вопросе имеется в виду именно ЯП).

svu ★★★★★
()
Последнее исправление: svu (всего исправлений: 1)
Ответ на: комментарий от svu

АЕ-то собирались. И программировать на ней реально тоже думали...

Ну и что?

Поэтому Жюль Верн придумал современную подводную лодку...;) Он просто не собирался ее строить!

Совершенно не связано с моим тезисом.

Достаточно строгое определение ЯП (в моем вопросе имеется в виду именно ЯП).

если подразумевается

Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ.

То английский - вполне язык программирования.

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

То английский - вполне язык программирования.

Ээээ вообще ни одно из слов «формальная», «предназначенная для записи компьютерных программ» к английскому не относится. Из него придется делать какое-то упрощенное подмножество, типа того же SQL.

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