Imagine Я определил следующее имя в J:Как я могу определить глагол в J, который применяет другой глагол попеременно каждому атому в списке?
m =: >: i. 2 4 5
Это выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Я хочу создать монадический глагол ранга 1, который применяется к каждому списку в этом список списков. Он удвоится (+:
) или добавит 1 (>:
) к каждому альтернативному элементу в списке. Если бы мы применили этот глагол к первой строке, мы получили бы 2 3 6 5 10
.
Довольно легко получить список булевых элементов, которые чередуются с каждым элементом, например, 0 1 $~{:$ m
дает нам 0 1 0 1 0
. Я думал, ага! Я буду использовать что-то вроде +:
` >: @.
, за которым следует какое-то выражение, но я никогда не мог заставить его работать.
Любые предложения?
UPDATE
Следующая, кажется, работает, но, возможно, это может быть переработана в нечто более элегантное ПРОФЕССИОНАЛЬНЫЙ J.
poop =: monad define (($ y) $ 0 1 $~{:$ y) ((]+:)`(]>:) @. [)"0 y )
Спасибо Давиду, последний ответ кажется, @ (+: '>: /.)" 1 –