Сначала, текущий примитив position
возвращает индекс найденного элемента, а если элемент не найден, возвращает false
.
Затем, весьма запутанно, выражения position """" и position """"
работают корректно и возвращают 0
,
в то время как 0 + position "1"""
вызывает ошибку,
что означает, что примитив position
участвует в логических операциях без типизации, но при участии в математических операциях требует типизации.
Логика возвращения числа или false
не только требует дополнительной типизации в NetLogo,
но и в JavaScript из-за неопределенности типов теряет возможность оптимизации JIT,
а поиск элемента в списке требует вызова функции equality
, которая является "горой дерьма",
сначала проверяет, являются ли значениями пустыми, затем сравнивает их на равенство,
если значения не равны, то происходит серия проверок типа, проверки Nobody
, проверки смерти, проверки черепахи, проверки цепочек, проверки списков и рекурсивного поиска элементов списка,
что приводит к выводу, что 0 != 1
.
Если требуется указать начальную позицию поиска, то можно использовать slice
для получения подстроки|подсписка, найти позицию и вычислить количество пропущенных элементов, что добавляет дополнительные затраты, сравнимые с lput
.
Вход Перед тем как оставить комментарий