Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  11:01[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение. 

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 5246—5237 | 5236—5227 | 5226—5217 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 103


№ 5236   26-09-2007 15:55 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5234« (Сергей Перовский)
___________________________

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

А вот пример на Хаскелле. Как известно, циклов там нет, но иногда нужны. Допустим, нужно в теле процедуры проделать какие-то действия над списком данных. Можно использовать функции, в том числе - анонимные:

main = do
    forM [1..100] $ \i -> do
        result <- process i
        print result

Оператора for в языке нет, имитируется функцией forM, которой подаётся список (в данном случае - чисел от 1 до 100) и анонимная функция с параметром i, который здесь выполняет роль счётчика цикла...


№ 5235   26-09-2007 15:51 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5234« (Сергей Перовский)
___________________________
Мы какие то очень разные области программирования рассматриваем.
Еще бы :)) Имена этим разным областям программирования - императивное и функциональное.
И я как программист ежедневно бывающий по обе стороны баррикады (пишу на лиспе и на delphi,java,csharp) могу полностью подтвердить. Я тоже не передаю функции в качестве параметров и тем более не возвращаю их как результат, когда работаю на императивных языках. Обьекты самое то.
Однако вот что странно. Стоит мне перейти на лисп - и передача функций встречается у меня же практически на каждой строчке.
Когда читал книгу по хаскелю и писал учебные программки - та же история.
Хотя вроде задачи одни и те же. С чего бы это ? :))



№ 5234   26-09-2007 15:41 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5232« (Jack Of Shadows)
___________________________
Для того чтобы техникой передачи функций как параметров никто не пользовался даже не нужно ее запрещать. Достаточно сделать ее неудобной, убрав анонимные функции. И 99% программистов никогда не будут передавать функции в качестве параметров. Слишком много возни.

Мне приходилось довольно часто передавать в качестве параметров функции.
Теперь предпочитаю передавать объекты-обработчики.
Вспоминая прежние задачи, ни нашел ни одного случая, когда функция была настолько простой, что ее удобно было бы описать прямо в качестве фактического параметра. Мы какие то очень разные области программирования рассматриваем.


№ 5233   26-09-2007 14:18 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5230« (Trurl)
___________________________

>>>даже локальные функции нельзя передавать в качестве аргументов другим функциям, что, впрочем, без анонимных функций пользы не даёт особой...

А чем  именованные функции хуже анонимных?

Ну, если на примере Оберонов, то тем, что именованные функции нельзя использовать как closure - локальные не передашь наружу, а глобальную не сделаешь замыканием...
Анонимные фынкции (лямбды) - это ведь динамические сущности, тогда как именованные - статичны.
Вот например, попробуем симитировать ленивые бесконечные списки на Обероне, или вообще просто отложенные вычисления (модель call-by-need)... Элемент, хранящий в себе такое отложенное вычисление, будет выглядеть примерно так:

(флаг_проведённого_вычисления, результат, функция_вычисляющая_значение)

Удобно ли будет помещать в этот кортёж именованную функцию (да ещё и глобальную), содержащую некий нужный нам в этом конкретном месте расчёт в виде машинного кода? Думаю, что нет.
В Оберонах скорее придётся создать некий объект, который будет содержать в себе список действий, своего рода AST, который по сути будет интерпретироваться...


№ 5232   26-09-2007 13:28 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5230« (Trurl)
___________________________

А чем  именованные функции хуже анонимных?
Неудобством, громоздкостью при частом использовании.
Сравните:


function MyFunc(x, y)
begin
  return x + y
end

ProcessListOfPairs(myList, MyFunc)


и


ProcessListOfPairs(myList, (x,y) -> x + y)


Для того чтобы техникой передачи функций как параметров никто не пользовался даже не нужно ее запрещать. Достаточно сделать ее неудобной, убрав анонимные функции. И 99% программистов никогда не будут передавать функции в качестве параметров. Слишком много возни.


№ 5231   26-09-2007 13:11 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5229« (Стэн)
___________________________

ABC has only five basic datatypes.

В таком случае стоит взглянуть на творение Мартина Ричардса, язык BCPL. Ричардс обкорнал CPL. С языка BCPL Деннис Ритчи строил сначала свой B, а потом и C. Опять-таки, BCPL генерировал O-код для виртуальной машины.

http://en.wikipedia.org/wiki/BCPL

A major reason for the compiler's portability lay in its structure. It was split into two parts: the front end parsed the source and generated O-code for a virtual machine, and the back end took the O-code and translated it into the code for the target machine... The language is unusual in having only one data type: a word, a fixed number of bits, usually chosen to align with the architecture's machine word and of adequate capacity to represent any valid storage address.


Читать лучше описание, а не Wikipedia:
"The BCPL Reference Manual". Martin Richards (1967)
http://www.europrog.ru/book/bcri1967e.pdf (PDF, 50 Кбайт)

Описание языка BCPL и O-кода см.
"The BCPL Cintcode System and Cintpos User Guide"
http://www.cl.cam.ac.uk/users/mr/bcplman.pdf (PDF, 700 Кбайт)


Думаю, речь должна идти не о минимализме, а о сбалансированности, гармоничности языка, построенного на принципах концептуальной экономии. Лисп, например, построен на этих принципах, но он не позволяет получать прозрачный доступ к традиционной архитектуре Эккерта-Неймана. Тыкать в битики пальцем.


№ 5230   26-09-2007 12:53 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5227« (Geniepro)
___________________________
>>>даже локальные функции нельзя передавать в качестве аргументов другим функциям, что, впрочем, без анонимных функций пользы не даёт особой...

А чем  именованные функции хуже анонимных?


№ 5229   26-09-2007 12:40 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5228« (panda)
___________________________
>>> Вот тут я понимаю ван Россума с его минимализмом :)

http://en.wikipedia.org/wiki/Guido_van_Rossum
http://en.wikipedia.org/wiki/ABC_programming_language

ABC has only five basic datatypes. It does not require variable declarations. It has explicit support for top-down programming. Statement nesting is indicated by indentation. It provides infinite precision arithmetic, unlimited sized lists and strings, and other features supporting orthogonality and ease of use by novices. Its designers claim that ABC programs are typically around a quarter the size of the equivalent Pascal or C programs, and more readable.


№ 5228   26-09-2007 12:31 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5226« (Александр Феоктистов)
___________________________

всякие форичи итд не кажутся мне таковыми, зачем пудрить мозги ещё одной сущностью, их и так расплодилось много  :)
вот тут я понимаю Вирта с его минимализмом.

Всякие форы [по индексам] и т.д. не кажутся мне таковыми, зачем пудрить мозги ещё одной сущностью, их и так расплодилось много. Вот тут я понимаю ван Россума с его минимализмом :)

Чем мое высказывание хуже Вашего? ;-)


№ 5227   26-09-2007 10:52 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5219« (Geniepro)
___________________________

Простейшее переписывание с массива на линейный список почти не сказалось на скорости - расчёт миллионного простого числа замедлилось с 18.1 сек лишь до 18.3, уже влияние оказывает локальность/глобальность переменной, содержащей этот список (18.3 сек при локальной plist, и 18.5 при глобальной)...

TYPE INTLIST = POINTER TO RECORD
                value : INTEGER;
                next  : INTLIST;
              END;

PROCEDURE PrimeList(n : INTEGER) : INTEGER;
  VAR plist : INTLIST;
      y, ys : INTLIST;
      nn : INTEGER;
      p  : INTEGER;

  PROCEDURE IsPrime(x : INTEGER) : BOOLEAN;
    VAR isP : BOOLEAN;
        pl  : INTLIST;
  BEGIN
    isP := TRUE;
    pl  := plist.next;
    WHILE isP & (pl.value*pl.value <= x) DO
      isP := (x MOD pl.value) # 0;
      pl  := pl.next
    END;
    RETURN isP
  END IsPrime;
BEGIN
  nn := n;
  y  := NIL;
  WHILE nn > 0 DO
    NEW(ys); ys.next := y; y := ys;
    DEC(nn)
  END;
  plist := ys;
  ys.value := 2; ys := ys.next;
  ys.value := 3; ys := ys.next;
  nn := 2;
  p  := 5;
  WHILE nn < n DO
    IF IsPrime(p) THEN
      y        := ys;
      ys.value := p;
      ys      := ys.next;
      INC(nn)
    END;
    INC(p, 2)
  END;
  RETURN y.value
END PrimeList;

Но этот код совершенно ещё не соответствует хаскелловскому - нет ни ленивых вычислений, ни бесконечных списков, ни фильтрации готовых списков...
Надо подумать над этим, глядишь - рантайм для Хаскелла получится... :о))

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


<<<... | 5246—5237 | 5236—5227 | 5226—5217 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 103


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования