Какой самый короткий способ определить анонимную рекурсивную функцию в Octave?


12

Я люблю функциональное программирование в Octave, но на практике это довольно громоздко. Я задаюсь вопросом о кратчайшем способе определения анонимной рекурсивной функции.

У меня есть некоторые идеи, но мне интересно, есть ли способ объединить эти идеи, чтобы сделать их еще короче (или одинаково короткими, но более универсальными). Ради этого вопроса давайте рекурсивно посчитаем до нуля (просто, чтобы сохранить полезную нагрузку максимально простой).

Если мои рассуждения верны, ни одно из имен переменных, которые я использовал в следующих примерах, не должно совпадать. Желаемая функция q(n), которая всегда должна возвращать ноль. iиспользуется как переменная счетчика, fэто рекурсивная функция, которую я вызвал gв локальной области видимости f.

44 байта, "встроенное определение f"

q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)

44 байта, "определение списка аргументов f"

q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)

44 байта, "отдельное определение f"

f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)

41 байт, «требуемая функция как возвращаемое значение»

f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)

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

Целью является, конечно, получить его ниже 39 байт для «полной» функции, попробуйте онлайн!

Ответы:


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.