Я люблю функціональне програмування в 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)
Поточний "переможець" надихається на цю відповідь недоліком . Однак, враховуючи великий спектр різних способів зробити це, можливо, хтось може придумати ще коротшу комбінацію методів.
Мета, звичайно, отримати її нижче 39 байт для "повноцінної" функції. Спробуйте в Інтернеті!