OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 16 Апрель, 2024 22:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10
Автор Сообщение
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Пятница, 03 Август, 2007 15:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ага, только это другая парадигма, со всеми вытекающими :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Пятница, 03 Август, 2007 18:13 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
А в чём проблема-то? Как приняла, так и передала - зачем вычислять то выражение, результат которого не понадобится?Фактически же из функции в функцию передаются не сами выражения, а лишь ссылки на них. Когда выражение понадобится, то оно вычисляется по этой ссылке, вот и всё...
Проблема в одинаковом понимании. Если отталкиваться от чисто императивного подхода само манипулирование ссылками уже есть часть вычислительного процесса. А ещё уже выполняемое действие - уже получение результата. Того же типа, что и EXECUTE.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 08 Август, 2007 18:29 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Фактически изменяется трактовка вызова функции на вызов по имени. Наглядное изложение этого вопроса в конспекте лекций http://www.wolfengagen.mephi.ru/Books/CAM'2001.zip


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 08 Август, 2007 20:08 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Ага, только это другая парадигма, со всеми вытекающими
Кстати, Вы, наверное, не поверите, но вот что один из отцов-основателей Хаскелла пишет в своей последней презентации на конференции OSCON (A Taste of Haskell, стр. 89):
Simon Peyton Jones писал(а):
Хаскелл: прекраснейший в мире императивный язык программирования

- Программа разделяется на две части:
-- чистый функциональный код (в основном)
-- необходимый императивный код (немного)

- Система типов сохраняет их строго раздельно

- Действия - сущности первого класса, что позволяет новые формы программной композиции

GUEST писал(а):
Фактически изменяется трактовка вызова функции на вызов по имени.
Не на вызов по имени, а на вызов по необходимости. Отличие в том, что при вызове по имени значение под эти именем вычисляется каждый раз при использовании этого имени, а при вызове по необходимости - только при первом вызове, далее используется ранее вычисленное значение.

В сочетании с прозрачностью по ссылкам в функциональном программировании получается всё нормально. В императивном может привести к неприятностям...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 08 Август, 2007 20:40 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
GUEST писал(а):
Фактически изменяется трактовка вызова функции на вызов по имени.
Не на вызов по имени, а на вызов по необходимости. Отличие в том, что при вызове по имени значение под эти именем вычисляется каждый раз при использовании этого имени, а при вызове по необходимости - только при первом вызове, далее используется ранее вычисленное значение.
Такого требования (повторное вычисление) вызов по имени не содержит.
Simon Peyton Jones писал(а):
прекраснейший в мире императивный язык программирования ... необходимый императивный код
Этот императивный код на Хаскелле?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 08 Август, 2007 21:06 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
GUEST писал(а):
Этот императивный код на Хаскелле?
Э... в смысле? Непонятна суть вопроса...

GUEST писал(а):
Такого требования (повторное вычисление) вызов по имени не содержит.
Ну прямо, может, и не содержит, но в результате так и получается...
Вот пример (предположим, что передача параметров идёт по имени):
Код:
PROCEDURE A(x, y, z): REAL;
BEGIN
   RETURN x + (1 + x*y/z) + z;
END A;

PROCEDURE B;
   VAR a, b, c: REAL;
BEGIN
   StdIn.Real (a); StdIn.Real (b); StdIn.Real (c);

   StdOut.Real (A (12+a+b, a-b/c, a*b*c));
END B;
Пример надуманный, но тем не менее... Не будем сейчас заморачиваться на том, что произойдёт в строке "StdIn.Real (a); StdIn.Real (b); StdIn.Real (c);", предположим, что произойдёт ввод трёх чисел с консоли в переменные a, b, c...

Так вот, что фактически произойдёт при передаче в процедуру A параметров по имени? Печать результата раскроется в такой вид:
Код:
   StdOut.Real ((12+a+b) + (1 + (12+a+b)*(a-b/c)/(a*b*c)) + (a*b*c));
потому что передача параметров именно по имени...

Кстати, Вирт в своей статье "Взгляд из Зазеркалья" упоминал, какие страшные глюки в программах могут быть при передаче параметров по имени в Алголе-60 (особенно в циклах)... :о))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 08 Август, 2007 22:15 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
GUEST писал(а):
Этот императивный код на Хаскелле?
Э... в смысле? Непонятна суть вопроса...

Суть вопроса в ответе на него.
Geniepro писал(а):
GUEST писал(а):
Такого требования (повторное вычисление) вызов по имени не содержит.
Ну прямо, может, и не содержит, но в результате так и получается...

До того как получить результат, надо вызов по имени сделать. Указанный пример им не является.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Четверг, 09 Август, 2007 09:33 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
GUEST писал(а):
Суть вопроса в ответе на него.
Хорошо заданный вопрос содержит половину ответа...

GUEST писал(а):
До того как получить результат, надо вызов по имени сделать. Указанный пример им не является.
Это как так?
Когда выражение
Код:
StdOut.Real (A (12+a+b, a-b/c, a*b*c));
начинает вычисляться, оно раскрывается в вид
Код:
StdOut.Real ((12+a+b) + (1 + (12+a+b)*(a-b/c)/(a*b*c)) + (a*b*c));
т.е. вместо x подставляется (12+a+b) или даже 12+a+b (что гораздо хуже) и т.д. Что это, как не вызов по имени? Или у Вас тоже какая-то новая терминология вроде "метапрограммирования на Обероне"? :о))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Четверг, 09 Август, 2007 10:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Метапрограммирование - это работа программы с собой как с данными. В простейшем случае - рефлексия (RTTI). В случае Оберона - динамическая модификация собственного состояния, опираясь на данные рефлексии (например, раскрутка стека и доступ к какой-то локальной переменной по её символьному имени). В более сложных случаях, которые были приняты, к примеру, в Лиспе - это самосоздание программы. Всё это - метапрограммирование.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Четверг, 09 Август, 2007 17:42 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
GUEST писал(а):
Суть вопроса в ответе на него.
Хорошо заданный вопрос содержит половину ответа...
Мы поняли друг друга.
Geniepro писал(а):
GUEST писал(а):
До того как получить результат, надо вызов по имени сделать. Указанный пример им не является.
Это как так?
Когда выражение
Код:
StdOut.Real (A (12+a+b, a-b/c, a*b*c));
начинает вычисляться, оно раскрывается в вид
Код:
StdOut.Real ((12+a+b) + (1 + (12+a+b)*(a-b/c)/(a*b*c)) + (a*b*c));
т.е. вместо x подставляется (12+a+b) или даже 12+a+b (что гораздо хуже) и т.д. Что это, как не вызов по имени? Или у Вас тоже какая-то новая терминология вроде "метапрограммирования на Обероне"? :о))
Очень просто. Это Ваша интерпретация действий компилятора, а не текст вызова по имени.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Четверг, 09 Август, 2007 18:32 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
GUEST писал(а):
Очень просто. Это Ваша интерпретация действий компилятора, а не текст вызова по имени.
Ну вапще-то у термина "вызов-по-имени" (call-by-name) есть вполне устоявшееся значение. Ну вот смотрим, например, сюда:
Цитата:
Call by name

In call-by-name evaluation, the arguments to functions are not evaluated at all — rather, function arguments are substituted directly into the function body using capture-avoiding substitution. If the argument is not used in the evaluation of the function, it is never evaluated; if the argument is used several times, it is re-evaluated each time. (See Jensen's Device.)
...

Call by need

Call-by-need is a memoized version of call-by-name where, if the function argument is evaluated, that value is stored for subsequent uses. In a "pure" (effect-free) setting, this produces the same results as call-by-name; when the function argument is used two or more times, call-by-need is almost always faster.

Так и будем дальше спорить непонятно о чём? :о))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Четверг, 09 Август, 2007 20:39 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
Так и будем дальше спорить непонятно о чём? :о))
Вижу, что знаете о чем. Даже подчеркнули для непонятливых.Имя - есть сущность именующая что-либо. Вызов по имени - есть обращение к чему либо по связи организованной его именем. Более пока ничего. Кстати, речь у Вас шла о том что вызов по необходимости - вызовом по имени не является. Как видите, Wiki с Вами не согласна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Четверг, 09 Август, 2007 21:37 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
GUEST писал(а):
Кстати, речь у Вас шла о том что вызов по необходимости - вызовом по имени не является. Как видите, Wiki с Вами не согласна.
Эх, процитирую сам себя: :о))
Цитата:
Не на вызов по имени, а на вызов по необходимости. Отличие в том, что при вызове по имени значение под эти именем вычисляется каждый раз при использовании этого имени, а при вызове по необходимости - только при первом вызове, далее используется ранее вычисленное значение.
Ну и где противоречие вике? В вике так прямо и сказано...

Спор ради спора? :о))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Пятница, 10 Август, 2007 19:09 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
GUEST писал(а):
Кстати, речь у Вас шла о том что вызов по необходимости - вызовом по имени не является. Как видите, Wiki с Вами не согласна.
Эх, процитирую сам себя: :о))
Цитата:
Не на вызов по имени, а на вызов по необходимости. Отличие в том, что при вызове по имени значение под эти именем вычисляется каждый раз при использовании этого имени, а при вызове по необходимости - только при первом вызове, далее используется ранее вычисленное значение.
Ну и где противоречие вике? В вике так прямо и сказано...

Противоречие в противопоставлении
Geniepro писал(а):
Не на вызов по имени, а на вызов по необходимости.
В Wiki сказано, что второе есть версия первого.
Geniepro писал(а):
Спор ради спора? :о))
Лучше процитировали бы, что я оспаривал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Пятница, 10 Август, 2007 20:29 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
GUEST писал(а):
Лучше процитировали бы, что я оспаривал.
Я не знаю, чего Вы добиваетесь этим флеймом, но я лично заканчиваю эту бесплодную дискуссию о разных видах ленивых вычислений...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Суббота, 11 Август, 2007 06:22 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Geniepro писал(а):
GUEST писал(а):
Лучше процитировали бы, что я оспаривал.
Я не знаю, чего Вы добиваетесь этим флеймом, но я лично заканчиваю эту бесплодную дискуссию о разных видах ленивых вычислений...
Я с Вами не спорил. И рад, что Вы это поняли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Пятница, 10 Декабрь, 2010 23:01 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Горячев писал(а):
Цикл FOR применим для ограниченного круга задач (недаром он даже в опале побывал)
В моих группах в Байтике он и сейчас в опале. И останется в опале.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB