Планария ничего не определит, ни как относительно примитивное животное, не тем более как программа, ее моделирующая. Нам в общем и не нужно чтобы она что-то там определила, нас интересует моделирование живого существа с наиболее близким к реальному поведением (в которое не входит такое действие, как определение собственной бессмертности).
У меня же есть вопрос к самой модели, существование которой вы допускаете.
Что это за модель?
Если брать реальный мир, то там у организма есть некоторые ресурсы (образно говоря бензин), есть голод (индикатор уровня бензина), и есть возможность действовать, тратя при этом ресурсы (у нас же не вечный двигатель, все действия чего-то стоят).
Соответственно, если моделировать эту ситуацию, то у планарии тоже есть некоторый изначальный запас ресурсов (допустим, в литрах) и есть индикатор (голод).
Допустим, просто так (на поддержание жизнедеятельности) она тратит 0.1 литра в час, а на движение средней скорости — 0.3 литра на сантиметр.
Чувство голода при этом может либо двоично влиять на необходимость двигаться в поисках еды (есть запас 10 литров — не ищем, запас меньше — ищем), либо влиять на интенсивность (чем меньше запас, тем сильнее ищем, быстрее и больше двигаемся, тратим на это больше ресурсов).
Очевидно, что в том случае если планария не смогла найти источник ресурса до того, как кончился запас, то запас становится равным нулю и отсутствует возможность его пополнить (потому что на действия уже нет ресурсов). В реальном мире это называется смертью.
Если смерть исключить, то у нас получается модель либо с бесконечными ресурсами, либо с бесплатными действиями. И никакого отношения к реальной жизни это уже не имеет.
Искусственный фактор будет моделировать реальный, с учетом особенностей виртуального окружения и всей программы в целом.
Да это понятно, я просто хочу сказать, что в таком случае вы лишаетесь возможности понимать и предсказывать будущее моделируемого организма с точки зрения реальной биологии. Т.е. из такой вот «бессмертной планарии» не сможет эволюционно развиться то, что в реальном мире произошло от реальной.
Про мотивацию:
Чувство голода существует у живых существ именно для напоминания «эй, поешь ка, а то тебе конец». Естественно, напоминание невербальное, и может быть организовано на самом низком физическо-химическом уровне. Соответственно, если существо не может умереть, то чувство голода моделировать вообще бессмысленно. Ешь, не ешь — все равно жив останешься.
Это как выхлопная труба у электромобиля получается — вроде так больше на автомобиль похоже, а нафига она ему — непонятно.
Из этой бессмысленности пойдут и другие косяки. В итоге, «что-то» смоделировать получится, но это не будет живым существом по своему поведению. Это будет именно программа, алгоритм.
По-моему все-таки существуют такие организмы, которые передают опыт своему потомству. Среди млекопитающих таких полно.
Я и не утверждал обратного ) Просто низкоуровневая передача является первичной, а осознанная — вторичной.
Все факторы влияния в программе являются искусственными, так что говорить, что некоторые из них будут искусственнее других не совсем корректно.
Искусственный фактор призван моделировать реальный (по вашему же описанию). Если это не так, то получится как раз пришелец с альфа-центавры, а не земное существо.
Двигателей прогресса помимо самосохранение хватает. Нет никаких других причин у эволюции живых существ (и вообще у любых действий живых существ), кроме сохранения жизни себе и/или своим потомкам (в конечном итоге). Может быть цепочка целей — например, изготовить копье, чтобы добыть еду, чтобы съесть — но в конечном итоге все равно все к одному сводится — не дать умереть себе или своим потомкам.
Под контактом здесь понимается вообще любой контакт — т.е. если кролик ест траву, то кролик контактирует с травой и трава контактирует с кроликом.
Я допускаю, что есть живые существа, которые даже в подобной форме никогда ни с кем не контактируют, но это просто исключения из правила.
Осознанная передача опыта (через обучение или конструирование себе подобных) сильно отличается от «низкоуровневой» передачи (через наследование и гены).
Неспроста не существует ни одного живого организма, который не умел бы пользоваться этой «низкоуровневой» передачей — потому что это единственный способ хоть как-то обеспечить жизнь вида в целом.
С точки зрения эмуляции этого процесса, если вы создаете единственный экземпляр, не способный к размножению, то вы не можете позволить ему умереть (по понятным причинам). Соответственно, вам придется искусственно ограничить возможные факторы влияния окружающего мира (потому что в реальном мира умереть можно запросто). А именно желание избежать смерти — двигатель прогресса и эволюции.
Если говорить просто о любом контакте с каким-либо другим живым существом, то «социальны» абсолютно все живые организмы — в сферическом вакууме не живет никто (ну разве что какая-нибудь бактерия-одиночка на космической станции, питающаяся неорганическими веществами).
Помимо собственно обучения конкретного экземпляра вида (в биологическом смысле), крайне важен механизм наследственности. Т.е. подразумевается, что часть экземпляров может дать потомство и передать им часть полученного опыта, накопив для этого достаточный объем ресурсов, а часть — может просто сдохнуть )
Обучение просто одного существа — может и неплохой шаг для начала, но явно не стоит избирать этот путь для дальнейшего развития.
Хм, алфавит говорите… Вот у вас в коробке лежат 33 вырезанные из картона буквы русского алфавита. Ваша задача — перекрасить их все в зеленый цвет, вытаскивая по одной.
Вы как будете буквы перекрашивать: в алфавитном порядке или просто в порядке доставания из коробки?
Да, согласен, какие-то нестандартные или даже просто немного непохожие на классику конструкции могут вызывать определенные сложности у некоторых людей, но это не повод не использовать их при написании скриптов. Потому что, повторюсь, нормального программиста нестандартные конструкции не испугают. А если их нестандартность оправдана, то еще и добавят ему в копилку немного опыта.
Не даст ничего потому, что array — это объект, а с объектами работа только по ссылке. Таким образом получить true можно только сравнивая массив сам с собой, либо две ссылки на один и тот же массив.
ar=[];
ar2=ar;
alert(ar==ar2); //true
И даже точного сравнения не надо.
сделать тест для переменного числа ветвей (от 1 до 10, например)
Да по-моему не имеет смысла.
Для 1-2 ветвей вообще проще всего использовать тернарный оператор, как вот ниже в комментах написали.
Для большего кол-ва ветвей интуитивно понятно, что switch будет работать быстрее чем множественные if else, к тому же предоставлять больше возможностей. Причем чем больше ветвей, тем больше разница во времени выполнения.
Не, ну default он для вообще непредвиденных значений.
Тут единственный способ эмуляции — ловить undefined при попытке вызова метода хэша, которого не существует и дальнейшая обработка.
Что собственно еще добавляет кривизны коду.
Так что это все для весьма редких случаев.
Немного непонятна логика метода Equals, тот момент где сортировка происходит.
Даже если массивы имеют одинаковый набор элементов, но разный их порядок — называть их эквивалентными как-то неправильно по-моему.
Иногда бывают такие штуки, что в switch их писать неудобно (по разным причинам, например код излишне дублируется или не хочется лишними переменными засорять текущий контекст). Тогда хэш может помочь. По сути, это такой полиморфизм на лету.
Можно вообще так писать:
({'one': obj.method, 'two': function(i) {return obj2.method3(i)*18}, 'three': function(){return false}})[value](i);
Хотя не факт что нужно )
Ну я естественно не запускал никаких тяжелых приложений во время тестов (собственно, вообще все закрыл кроме браузеров), но винда периодически может выполнять какие-то свои внутренние задачи, которые жрут немножко процессорного времени.
Для этого каждый тест в одном браузере и прогоняется несколько раз, чтобы понять среднее значение.
У меня же есть вопрос к самой модели, существование которой вы допускаете.
Что это за модель?
Если брать реальный мир, то там у организма есть некоторые ресурсы (образно говоря бензин), есть голод (индикатор уровня бензина), и есть возможность действовать, тратя при этом ресурсы (у нас же не вечный двигатель, все действия чего-то стоят).
Соответственно, если моделировать эту ситуацию, то у планарии тоже есть некоторый изначальный запас ресурсов (допустим, в литрах) и есть индикатор (голод).
Допустим, просто так (на поддержание жизнедеятельности) она тратит 0.1 литра в час, а на движение средней скорости — 0.3 литра на сантиметр.
Чувство голода при этом может либо двоично влиять на необходимость двигаться в поисках еды (есть запас 10 литров — не ищем, запас меньше — ищем), либо влиять на интенсивность (чем меньше запас, тем сильнее ищем, быстрее и больше двигаемся, тратим на это больше ресурсов).
Очевидно, что в том случае если планария не смогла найти источник ресурса до того, как кончился запас, то запас становится равным нулю и отсутствует возможность его пополнить (потому что на действия уже нет ресурсов). В реальном мире это называется смертью.
Если смерть исключить, то у нас получается модель либо с бесконечными ресурсами, либо с бесплатными действиями. И никакого отношения к реальной жизни это уже не имеет.
Да это понятно, я просто хочу сказать, что в таком случае вы лишаетесь возможности понимать и предсказывать будущее моделируемого организма с точки зрения реальной биологии. Т.е. из такой вот «бессмертной планарии» не сможет эволюционно развиться то, что в реальном мире произошло от реальной.
Про мотивацию:
Чувство голода существует у живых существ именно для напоминания «эй, поешь ка, а то тебе конец». Естественно, напоминание невербальное, и может быть организовано на самом низком физическо-химическом уровне. Соответственно, если существо не может умереть, то чувство голода моделировать вообще бессмысленно. Ешь, не ешь — все равно жив останешься.
Это как выхлопная труба у электромобиля получается — вроде так больше на автомобиль похоже, а нафига она ему — непонятно.
Из этой бессмысленности пойдут и другие косяки. В итоге, «что-то» смоделировать получится, но это не будет живым существом по своему поведению. Это будет именно программа, алгоритм.
Я и не утверждал обратного ) Просто низкоуровневая передача является первичной, а осознанная — вторичной.
Все факторы влияния в программе являются искусственными, так что говорить, что некоторые из них будут искусственнее других не совсем корректно.
Искусственный фактор призван моделировать реальный (по вашему же описанию). Если это не так, то получится как раз пришелец с альфа-центавры, а не земное существо.
Двигателей прогресса помимо самосохранение хватает. Нет никаких других причин у эволюции живых существ (и вообще у любых действий живых существ), кроме сохранения жизни себе и/или своим потомкам (в конечном итоге). Может быть цепочка целей — например, изготовить копье, чтобы добыть еду, чтобы съесть — но в конечном итоге все равно все к одному сводится — не дать умереть себе или своим потомкам.
Я допускаю, что есть живые существа, которые даже в подобной форме никогда ни с кем не контактируют, но это просто исключения из правила.
Неспроста не существует ни одного живого организма, который не умел бы пользоваться этой «низкоуровневой» передачей — потому что это единственный способ хоть как-то обеспечить жизнь вида в целом.
С точки зрения эмуляции этого процесса, если вы создаете единственный экземпляр, не способный к размножению, то вы не можете позволить ему умереть (по понятным причинам). Соответственно, вам придется искусственно ограничить возможные факторы влияния окружающего мира (потому что в реальном мира умереть можно запросто). А именно желание избежать смерти — двигатель прогресса и эволюции.
Обучение просто одного существа — может и неплохой шаг для начала, но явно не стоит избирать этот путь для дальнейшего развития.
Вы как будете буквы перекрашивать: в алфавитном порядке или просто в порядке доставания из коробки?
Да, согласен, какие-то нестандартные или даже просто немного непохожие на классику конструкции могут вызывать определенные сложности у некоторых людей, но это не повод не использовать их при написании скриптов. Потому что, повторюсь, нормального программиста нестандартные конструкции не испугают. А если их нестандартность оправдана, то еще и добавят ему в копилку немного опыта.
и что это за программист, у которого возникают проблемы, когда он видит обратный цикл?
ar=[];
ar2=ar;
alert(ar==ar2); //true
И даже точного сравнения не надо.
Так что все взаимосвязано )
Да по-моему не имеет смысла.
Для 1-2 ветвей вообще проще всего использовать тернарный оператор, как вот ниже в комментах написали.
Для большего кол-ва ветвей интуитивно понятно, что switch будет работать быстрее чем множественные if else, к тому же предоставлять больше возможностей. Причем чем больше ветвей, тем больше разница во времени выполнения.
Тут единственный способ эмуляции — ловить undefined при попытке вызова метода хэша, которого не существует и дальнейшая обработка.
Что собственно еще добавляет кривизны коду.
Так что это все для весьма редких случаев.
Opera 6.05 — 1170 :)
Хорошо что так, а не наоборот )
Даже если массивы имеют одинаковый набор элементов, но разный их порядок — называть их эквивалентными как-то неправильно по-моему.
А по существу — если не делать сортировку, то
в десятки (в некоторых случаях в сотни) раз быстрее, жрет меньше памяти и меньше места в коде.
Можно вообще так писать:
({'one': obj.method, 'two': function(i) {return obj2.method3(i)*18}, 'three': function(){return false}})[value](i);
Хотя не факт что нужно )
Для этого каждый тест в одном браузере и прогоняется несколько раз, чтобы понять среднее значение.
var loop=1000000;
function start() {time=new Date();}
function end() {document.write("
"+(new Date() - time));}
var cicles={
'classic_cicle': function(){for(var i=0; i<loop; i++) {}},
'invert_cicle': function(){for(var i=loop; i--;) {}},
'while_cicle': function() {var i=loop; while(i--) {}}
}
start();
cicles.classic_cicle();
end();