В следующем фрагменте кода данного (слово) список перевернутой:GNU сделать: временная сложность списка доступов
not_null=$(if $(strip $(1)),t,)
invert_list=$(if $(call not_null,$(firstword $(1))),$(call invert_list,$(wordlist 2,1000,$(1))) $(firstword $(1)))
$(info $(call invert_list,1 2 3 4))
Как вы можете видеть, я изменял, давая догадывались верхний предел списка 1000 вместо $(words $(1))
на каждой рекурсии, в надежде остаться в O (N) границах. Является ли это разумным в GNU make после всех или является функцией слов O (1)?
Есть ли приемлемый способ программирования таких конструкций? Есть что-то на вашей веб-странице (спасибо за это, BTW)? – Vroomfondel
Ну, я действительно не знаю, что вы подразумеваете под «такими конструкциями». Нет ничего более продвинутого, чем доступные функции (если вы не хотите использовать интеграцию Guile). Первое, что нужно задать, это действительно проблема? Длина строк, которые обычно работают, не требует большой оптимизации. Будьте осторожны при использовании ': =', где это возможно, чтобы избежать дублирования расширения. Если он действительно медленный (как измерено, не догадался), и вы не хотите/не можете использовать Guile, подумайте, может ли использовать '$ (shell ...)' для запуска отдельной программы. – MadScientist
В вашем примере вы также можете использовать вспомогательную функцию, которая вычисляла длину исходного списка один раз, а затем передала это как первый аргумент 'invert_list' – MadScientist