LINUX.ORG.RU

Вопрос про обобщенные функции

 , , ,


1

3

Пишут, что это необычайно мощная весчь. Только я вот чего не пойму. Что если я вместо такого

(defgeneric collide (x y))

(defmethod collide ((x asteroid) (y asteroid))
  ;;астероид сталкивается с астероидом
  )

(defmethod collide ((x asteroid) (y spaceship))
  ;;астероид сталкивается с космическим кораблем
  )
;;......
Напишу просто функцию, что-то вроде
(define (collide x y)
 (cond
   ((and (instance? x asteroid) (instance? y asteroid)) 
     ("астероид сталкивается с астероидом"))
   ((and (instance? x asteroid) (instance? y spaceship))
     ("астероид сталкивается с космическим кораблем"))
 ;;;..............
       ))
; И вызываю так
(collide asteroid asteroid)

То что от этого принципиально изменится? То есть я понимаю, что тут есть небольшой синтаксический сахарок, но речь не об этом. Заявляется обычно о том, что это какая то неимоверно мощная техника ООП, которая, чуть ли не затмевает собой все остальное. Например Legioner недавно заявил

Полиморфизм (времени выполнения) это сердце ООП. В этой связи, как ни странно, квинтэссенция ООП это мультиметоды

.

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

Иными словами, в чем сила?

Спасибо.

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

тот anonymous, который про фикс МТ рассуждал, пошел уроки доучивать, ему некогда, я за него отвечу. Ты хоть понимаешь, что это за бред, «фикшенная МТ»? Это модель, она работает так как работает. Если бы это можно было пофиксить, не было бы никакой проблемы останова, потому что уже в начале бесконечного вычисления, машина могла бы фиксить это, и выдавать вместо бесконечного вычисления, результат этого вычисления — доставала бы табличку с надписью «бесконечное вычисление» и втыкало бы ее тебе в рожу. Твоя любовь к ФП заставляет тебя опускаться на самое дно глупости, прислушиваться к высерам любого подвернувшегося под руку неадеквата, лишь бы он говорил то, что тебе удобно слышать.

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

Ты хоть понимаешь, что это за бред, «фикшенная МТ»

Почему бред? Линии любой «фикшенной» НМТ, насколько я понимаю, являются подмножеством нефикшенной, т.ч. если фикшенная машина решает задачу, то и нефикшенная решает.

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

ОК, в таком случае, насколько я понимаю, «фикшенная НМТ» (в которой нет бесконечных альтернативных линий) по методу этого Плоткина эквивалентна актору, описанному анонимусом (это по-моему тривиально доказывается).

Вычислительно они и до и после «фикса» эквивалентны. Просто после фикса интерпретация удобнее.

А требование о ее пофикшенности эквивалентно требованию анонимуса, что у него во всех акторах сообщения доставляются за конечное время.

Да, это все одно и то же, но разными словами: «сообщения не теряются», «неограниченный нондетерменизм», «отсечение бесконечных путей при наличии конечных альтернатив»

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

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

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

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

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

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

завершающимся МТ

такого термина не существует. Есть алгоритмы которые завершаются. Ты вообще нулевой, да еще и фантазер, нафиг на тебя тут время тратят как ты думаешь?

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

Бред, в первую очередь в том, что пофиксить это невозможно, не уходя за рамки модели

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

завершающимся МТ соответствуют НМТ в которых завершается _хотя бы одна_ ветка

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

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

МТ и задает конкретный алгоритм, если ты не в курсе. Спасибо, что еще раз подтвердил уровень соей некомпетентности - а то ведь до этого момента кто-то мог твои посты всерьез воспринимать.

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

потому что нет никакого Васи в МТ, который берет и выдирает эти ветки

Никакого Васи, который размножает МТ в момент choice'a, тоже нет, прикинь.

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

какое-то количество из них на текущем шаге остановилось

Начнем с малого. С чего ты взял, что хоть одна ветка остановится? Тебе это кто-то гарантирует?

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

Начнем с малого. С чего ты взял, что хоть одна ветка остановится? Тебе это кто-то гарантирует?

Я смотрю на множество всех веток, и вижу, есть ли среди них конечные. Если нет - ну, значит, не останавливается.

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

который размножает МТ

А там и нет никакого размножения, размножение иногда просто применяется для описания, это не соответствует действительности. Там, на самом деле просто производится недетерминированный выбор между ветвями, как в примере выше, «перейти к шагу три или произвести добавить единицу» — это более похоже на подбрасывание монеты. Просто можно рассмотреть все варианты всех возможных выборов как бы сразу, поэтому и говорят об этом. Каждый вариант вычисления можно представить как выполняющийся на отдельной машине. Твоя безграмотность зашкаливает.

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

== актор пока сообщение не получил.

Не, это значит, что сообщение 'stop не отправлено. Потому что если бы оно было отправлено, то оно было бы и получено (рано или поздно).

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

Я смотрю

LOL, ну смотри дальше, только не простудись. Ты стал самым необходимым компонентом системы, отныне машина тебя не отпустит.

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

А там и нет никакого размножения, размножение иногда просто применяется для описания, это не соответствует действительности. Там, на самом деле просто производится недетерминированный выбор между ветвями, как в примере выше, «перейти к шагу три или произвести добавить единицу» — это более похоже на подбрасывание монеты.

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

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

Еще один не знает формального определения НМТ? Ну так прочитай, какие проблемы?

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

Да это чушь полная. Само понятие «недетерминированная» подразумевает то, что у машины есть более чем один вариант продолжения, в этом суть, а не в твоем размножении. Заранее неизвестно, по какой именно ветке пойдет вычисление, но если все возможные деревья потенциально завершаются, значит недетерминизм ограничен, так как все возможные пути мы можем заранее предсказать. Как в подбрасывании монеты — либо орел либо решка, что именно выпадет — неизвестно, но варианты ограничиваются двумя. А о что ты тут плетешь — это детский сад.

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

но если все возможные деревья потенциально завершаются, значит недетерминизм ограничен

Так не все завершаются. Но те, которые завершаются, в рассматриваемой задаче эквивалентны актору. Причем ветка, которая закончилась через N шагов, эквивалентна актору, сгенерировавшему стоп через N шагов. А раз есть те, которые завершаются, то НМТ решает задачу.

Тут налуркал, что каждая НМТ еще и эквивалентна некоторой ДМТ (если подумать хорошенько, то это очевидно). А это совсем хорошо.

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

Само понятие «недетерминированная» подразумевает то, что у машины есть более чем один вариант продолжения, в этом суть

«более чем один» значит «множество». Одно состояние МТ превращается в множество состояний МТ. Что тебе тут непонятного?

но если все возможные деревья потенциально завершаются

С чего ты взял, что они завершаются?

значит недетерминизм ограничен, так как все возможные пути мы можем заранее предсказать

А мы и можем. Недетерменизм это никак не ограничивает, правда.

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

Но те, которые завершаются, в рассматриваемой задаче эквивалентны актору.

Еще раз, ради точности - отсекаются не все незавершающиеся ветки, а _только те, для которых в точке ветвления есть конечная альтернатива_. Для актора который сам себе постоянно отправляет одно и то же сообщение в ответ на это самое сообщение - конечной ветки нет, например, по-этому здесь будет бесконечный path.

Тут налуркал, что каждая НМТ еще и эквивалентна некоторой ДМТ

Ну естественно. Выше по треду это не раз говорилось.

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

Если завершаются не все, значит нет гарантии на доставку.

Причем ветка, которая закончилась через N шагов, эквивалентна актору, сгенерировавшему стоп через N шагов

постфактум может и эквивалентна, и что с того? Мы же не выборочные ветки рассматриваем, а модели в целом.

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

С чего ты взял, что они завершаются?

ЕСЛИ завершаются, читать разучился.

Недетерменизм это никак не ограничивает, правда.

Мда, если бы ты еще понимал что это такое, было бы вообще хорошо. Все, я ушел.

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

Мда, если бы ты еще понимал что это такое, было бы вообще хорошо.

Я в отличии от тебя знаю, что это такое, т.к. читал оригинальное определение, а не то что там себе навыдумывал хьюитт. И оно как раз идет в контексте НМТ, с отсечением «бесконечных» веток.

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

что каждая НМТ еще и эквивалентна некоторой ДМТ

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

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

Если завершаются не все, значит нет гарантии на доставку.

Да нет, не значит. Актор который отправляет себя 'next в ответ на 'next и больше ничего не делает имеет бесконечный path и при этом все сообщения доставляет. path не может быть бесконечным только тогда когда он порождает бесконечное число состояний, в остальных случаях допускается.

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

Если завершаются не все, значит нет гарантии на доставку.

Да нет, не значит. Актор который отправляет себя 'next в ответ на 'next и больше ничего не делает имеет бесконечный path и при этом все сообщения доставляет. path не может быть бесконечным только тогда когда он порождает бесконечное число состояний, в остальных случаях допускается.

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

Че ты плетешь? Тебе же сказали, что бесконечного вычисления не будет, так как рано или поздно он получит stop.

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

Ты что тупой? Еще раз, мы рассматриваем актор который отправляет только 'next. Никакого 'stop нету, его никто не отправляет, а потому никто не получит. Конечного path в этом случае нет, по-этому бесконечный не отсекается.

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

мы рассматриваем актор который отправляет только 'next. Никакого 'stop нету, его никто не отправляет, а потому никто не получит

А зачем эти фантазии рассматривать? Ну рассмотри случай, когда вообще сообщений нет, или случай с другими собщениями, если делать нехрена, это никого не интересует.

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

А зачем эти фантазии рассматривать?

Потому что это вопрос семантики модели. Отсекаются не все бесконечные пути, а только те, что имеют альтернативу. Если отсечь все бесконечные, то получится другая модель (не тьюринг-полная, вообще говоря).

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

Собственно, не рассматривать виснущие акторы - то же самое, что не рассматривать виснущие МТ, потому что это одно и то же.

Актор у которого есть конечный path соответствует НМТ у которой есть конечный path, а этой НМТ соответствует МТ, которая гарантированно завершается (если говорить о твоем примере с актором который дает инкремент либо 'stop, то ему соответствует МТ, которая выводит 0 и останавливается, например).

Актор у которого отсутствует конечный path соответствует такой же НМТ и гарантированно виснущей МТ, аналогично.

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

соответствует МТ, которая выводит 0 и останавливается, например

Нет не сответствует. В случае с акторами возвращается неопределенное число < бесконечности.

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

В случае с акторами возвращается неопределенное число < бесконечности.

Все верно, тот актор реализует ф-ю, которая игнорирует свой аргумент и возвращает какое-нибудь (любое) натуральное число. Это определение данной ф-и. ф-я const 0 удовлетворяет этому свойству - она игнорирует свой аргумент и возвращает какое-нибудь (в данном случае 0) натуральное число.

А написать на акторах такую ф-ю, которую бы нельзя было написать на МТ - невозможно.

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

Ты плохо знаешь семантику акторов. Модель акторов _не требует_ чтобы сообщения приходили в каком-то определенном порядке, она дозволяет любой порядок доставки. Он может быть строго определенный и постоянный при каждом запуске (и с-но данная ф-я будет возвращать одно и то же значение - например 0. или 1. или 54353534), может чередоваться по каким-то хитрым алгоритмам, может быть случаен (с тем или иным распределением). Он не специфицирован. Я могу выбрать любой и это будет удовлетворять семантике акторов. Ну точно так же как в сишке i++ + i++ не определено, по-этому результат может быть каким угодно - и вне зависимости от результата это все та же сишка.

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

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

ты не можешь требовать, чтобы результат работы этой ф-и был случаен.

То есть в семантике ничего про случайность нет, там только «вернуть какое-нибудь натуральное число», ноль (или 1, или 2, или 63645) к таковым относится, так что все впорядке, семантике соовтетствует, указанная МТ ведет себя в соответствии с определением актора.

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

Там прописано отсутствие порядка доставки, а вероятностное распределение никого вообще не колышет.

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

Еще раз. МТ не может сделать то, что делает актор, а именно — вернуть неопределенное число в диапазоне > -1 && < бесконечности.

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

Там прописано отсутствие порядка доставки, а вероятностное распределение никого вообще не колышет.

Правильно. А для того, чтобы возвращалось разное число при запусках, на порядок доставки надо наложить ограничения (он должен быть случаен). Хьюитт такого ограничения не накладывает. Или ты не про модель Хьюитта? Или ты опять не прочитал статьи, линк на которые сам давал?

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

Хьюитт такого ограничения не накладывает

Накладывает. В модели есть абстракция Арбитра, именно она и отвечает за это

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

МТ не может сделать то, что делает актор, а именно — вернуть неопределенное число в диапазоне > -1 && < бесконечности.

НО МА в данном случае не возвращает «неопределенное число». Она возвращает впонле конкретное число - просто это число может быть любым.

Еще раз, у нас есть описание данной МА (актор отправляющий сам себе инкрементирующий 'next и 'stop), есть семантика. Согласно этой семантике эта МА может вести себя следующими способами: 1. она может всегда возвращать одно и то же натуральное число (любое - это может быть 0, 1, 5645645) 2. она может возвращать разные числа - при этом числа могут чередоваться любым способом - может по алгоритму, может случайным с тем или иным распределением

ВСЕ эти варианты поведения соответствуют семантике. То есть указанная МТ (возвращающая всегда 0) соответствует семантике. Чтобы она семантике не соответствовала - надо наложить ограничения на порядок доставки сообщений для МА, но хьюитт четко пишет, что никаких ограничений нет.

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

Так и тут - Ма может возвращать одно и то же, может что-то ращное, может чередовать. Хьюитт ненакладывает никаких ограничений.

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

Накладывает. В модели есть абстракция Арбитра, именно она и отвечает за это

Нет, не накладывает. Он четко пишет, что арбитр может работать как угодно и доставлять сообщения в любом порядке. В ЛЮБОМ. То есть может и в каком-то четко определенном.

Если бы не это свойство, МА была бы неприменима к реальным системах, т.к. во многих реальных системах порядок как раз жесткий.

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

Она возвращает впонле конкретное число - просто это число может быть любым.

Сам то понял что сказал?

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

То есть может и в каком-то четко определенном.

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

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

А порядок доставки полностью неопределен по-дефолту.

Именно так. То есть никто тебе не гарантирует что этот порядок должен быть случаен, вот пруфец:

The Actor Model is characterized by inherent concurrency of computation
within and among Actors, dynamic creation of Actors, inclusion of Actor
addresses in messages, and interaction only through direct asynchronous
message passing with no restriction on message reception order.

Он может быть _любым_. Случайным, фиксированным, каким угодно.

Определенность — это то что заранее можно предсказать.

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

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

вот пруфец

В чем пруфец? Нет ограничений на порядок — это и есть неопределенность порядка. Ты какой то больной, наверное математикой перезанимался. Некоторый порядок с какой-то точки зрения естественно являеся частным случаем хаоса. Но нет предопределенного порядка.

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

Я тебе сказал, иди лечись. Можно угадать результат подброса монеты, с 50% вероятностью, но это не значит, что твои угадайки имеют какое о отношение к определенности.

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

Нет ограничений на порядок — это и есть неопределенность порядка.

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

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