В качестве упражнения для начинающих я попытался рассчитать следующую сумму в J, sum(1/(1+0.03)^n for n = 1 to 30
, используя +/%(1 + 0.03)^ >:i.30
. Как я могу написать это в простой негласной форме? все, что я пробовал, значительно уродливее, чем явный вид выше, например, >:@[ (+/&:%)@:^ >:&[email protected]]
Что такое хорошая негласная форма суммы (1/(1 + x)^y) в J
ответ
Вы могли бы начать с
+/@:%@((1 + 0.03)^>:@i.) 30
Вы можете сделать 0,03 левый аргумент с помощью вилки, но с использованием крюка может быть чиста
(1 + 0.03) +/@:%@([^>:@[email protected]]) 30 NB. use fork
(1 + 0.03) +/@:%@(^ >:@i.) 30 NB. use hook
Такой же операцией (приращение) в настоящее время выполняются как слева, так и справа до ^
. Это подсказка, что &
(Compose) может быть полезна.
0.03 +/@:%@(^&>: i.) 30 NB. apply increment to both left & right arg
Мне нравится, как вы определили прирост в нечто общее с обеими сторонами, а также ваше использование крючка. Я предпочитаю Cap в этом случае, поэтому фразировка, которую я одобряю в данный момент, это 'formula =: [: +/[:% (^ &>: i.)' – kaleidic
Когда я хочу использовать неявную функцию, я часто даю 13 :
ударить его мне. В этом случае некоторые варианты:
13 : '+/ %((1+0.03)^1+i.y)'
[: +/ [: % 1.03^1 + i.
13 : '+/ %((1+0.03)^>:i.y)'
[: +/ [: % 1.03^[: >: i.
И с 1+0.03
или независимо от того, как leftargument:
13 : '+/ %(x^1+i.y)'
[: +/ [: % [^1 + [: i. ]
13 : '+/ %(x^>:i.y)'
[: +/ [: % [^[: >: [: i. ]
Там будут слишком много колпачков ([:
) называть его менее уродливым, хотя, но это Начало.
Tacit form работает намного плавно для некоторых расчетов, чем другие. Поскольку значения необходимо применять нерегулярно в пределах формулы, накладные расходы на их прохождение через эти точки становятся обременительными. Этот факт обсуждается (в контексте не-J) в сообщении в блоге, http://evincarofautumn.blogspot.com/2012/02/why-concatenative-programming-matters.html, под заголовком раздела «Темная сторона», , В приведенной формуле я считаю, что два аргумента не являются по своей сути неуклюжими, но вместо этого обрабатываются крючком, как показывает Тикканц. – kaleidic