Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 5286 27-09-2007 18:37 | |
Ответ на »сообщение 5285« (Geniepro)
___________________________
Ну это непрактичное решение. Легче все таки просто поименовать функцию чем так извращаться.
В конце концов, главное это читабельность кода.
№ 5285 27-09-2007 18:30 | |
Ответ на »сообщение 5284« (Jack Of Shadows)
___________________________
Упс, ошибочка вышла. Так не сработает. Рекурсивные функции нельзя описывать анонимно. Имя нужно.
Ну вапще-то можно и анонимно. Для этого достаточно вспомнить о комбинаторах. Если сделать маленькую библиотечку разных комбинаторов: s f g x = f x (g x)
y f = f (y f)
cond p f g x = if p x then f x else g x то вот это выражение: (y ((cond (==0) (const 1)) . ((s (*)) . (. pred)))) будет анонимной рекурсивной функцией, вычисляющей факториал...
Осталось только переписать НОД на комбинаторы... 8-о А это посложнее, у НОДа два параметра, а не один, как у факториала...
№ 5284 27-09-2007 15:36 | |
Ответ на »сообщение 5283« (Jack Of Shadows)
___________________________
Упс, ошибочка вышла. Так не сработает. Рекурсивные функции нельзя описывать анонимно. Имя нужно.
№ 5283 27-09-2007 13:41 | |
Ответ на »сообщение 5281« (Trurl)
___________________________
Пожалуйста:
lcf x 0 = x
lcf x = lcf y (mod x)
(mod x) возвращает анонимную функцию.
№ 5282 27-09-2007 12:15 | |
Ответ на »сообщение 5280« (Jack Of Shadows)
___________________________
Вот что в Оберонах плохо - нет полиморфизма (или хотя бы дженериков), и процедуры не являются полноценными гражданами первого класса - нет анонимных функций, и даже локальные функции нельзя передавать в качестве аргументов другим функциям, что, впрочем, без анонимных функций пользы не даёт особой...
Geniepro
Спор начался с того, что в императивном Обероне нет анонимных функций :)
Если мы посмотрим проекты на императивных языках, то передача функции в качестве параметра встретится крайне редко.
Почему в функциональных языках это необходимо, я думаю, пояснять не надо.
ProcessListOfPairs myList \x y -> x + y
нужно сравнивать с конструкцией
for i:=0 to M-1 Do A[i]:=A[i]+B[i];
Простые конструкции вовсе не требуется оформлять в виде именованной процедуры.
Ни в функциональных, ни в императивных языках.
№ 5281 27-09-2007 12:00 | |
Ответ на »сообщение 5278« (Jack Of Shadows)
___________________________
>>>Можно, приведите пример на дельфи/оберон. И мы попробуем вам дать аналог на хаскеле/лиспе
Зачем на дельфи/оберон? Можно сразу на хаскеле.
lcf x 0 = x
lcf x y = lcf y (x `mod` y)
Осталсь только записать как анонимную функцию.;-)
№ 5280 27-09-2007 11:51 | |
Ответ на »сообщение 5275« (Сергей Перовский)
___________________________
Быстренько поискал в нескольких лисповых библиотеках использование анонимных функций.
hunchentoot: (web server) 226 kb - 40 анонимных функций
parenscript (javascript генератор) - 62 kb - 64 анонимных функций
cl-json - 15 kb - 14 анонимных функций
cl-ppcre (regular expressions) - 338 kb - 70 анонимных функций
cl-sql - 440 kb - 97 анонимных функций
Я думаю вопрос о частоте использования анонимных функций можно снимать :))
№ 5279 27-09-2007 11:34 | |
Ответ на »сообщение 5275« (Сергей Перовский)
___________________________
Мне кажется, это похоже на inline функции, механизм очень мощный, но очень редко используемый.
Вам кажется потому что вы не там смотрите :))
В императивных языках этот механизм практически не используется. Уже об этом говорили. В функциональных языках используется сплошь и рядом.
Посмотрите исходники любой библиотеки на хаскель или лисп, благо их полно в интернете.
№ 5278 27-09-2007 11:32 | |
Ответ на »сообщение 5275« (Сергей Перовский)
___________________________
А можно вместо суммы пример хотя бы с нахождением НОД?
Можно, приведите пример на дельфи/оберон. И мы попробуем вам дать аналог на хаскеле/лиспе
№ 5277 27-09-2007 11:31 | |
Ответ на »сообщение 5274« (Trurl)
___________________________
>>>Ну почему же передергиваю ?
Потому что перешли от анонимности к краткости.
По моему смысл введения анонимных функций в язык заключается именно в их краткости. Больше они НИЧЕМ от именованных не отличаются.
То есть анонимность суть краткость.
Или вы видите какое то другое обьяснение их существования ?
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|