2014-09-22 9 views
4

У меня есть списокJ: Как эффективно применять глагол к префиксам суффиксов?

n =: i.3 

, и я хочу, чтобы иметь наречием таким образом, что КАС применяет у к префиксы суффиксов из н:

<a n 
┌─────────────┬───────┬───┐ 
│┌─┬───┬─────┐│┌─┬───┐│┌─┐│ 
││0│0 1│0 1 2│││1│1 2│││2││ 
│└─┴───┴─────┘│└─┴───┘│└─┘│ 
└─────────────┴───────┴───┘ 

Я написал предложение, которое дает желаемый результат для глагола <:

([: <@]\&.> <@]\.) n 
┌─────────────┬───────┬───┐ 
│┌─┬───┬─────┐│┌─┬───┐│┌─┐│ 
││0│0 1│0 1 2│││1│1 2│││2││ 
│└─┴───┴─────┘│└─┴───┘│└─┘│ 
└─────────────┴───────┴───┘ 

, но я не могу получить, как сделать наречие, чтобы использовать его с любым глаголом.

вижу иной подход к этой проблеме:

a =: \\. 
    <a n 
┌─┬───┬─────┐ 
│0│0 1│0 1 2│ 
├─┼───┼─────┤ 
│1│1 2│  │ 
├─┼───┼─────┤ 
│2│ │  │ 
└─┴───┴─────┘ 
    ([: < (a: ~: ]) # ])"1(<a n) 
┌─────────────┬───────┬───┐ 
│┌─┬───┬─────┐│┌─┬───┐│┌─┐│ 
││0│0 1│0 1 2│││1│1 2│││2││ 
│└─┴───┴─────┘│└─┴───┘│└─┘│ 
└─────────────┴───────┴───┘ 

но также написана специально для <, и, возможно, не эффективно. И я до сих пор не могу понять, как сделать наречие.

Это будет даже лучше, если я могу получить следующий результат:

<a n 
┌─┬───┬─────┬─┬───┬─┐ 
│0│0 1│0 1 2│1│1 2│2│ 
└─┴───┴─────┴─┴───┴─┘ 

Например:

(10&#.)a n 
0 1 12 1 12 2 

Помогите мне пожалуйста. Заранее спасибо.

ответ

3

Существует (почти) уже наречие для этого. Это Spread (S:), который вы хотите применить к уровню 0.

E.g.

<\ each <\. n 
┌─────────────┬───────┬───┐ 
│┌─┬───┬─────┐│┌─┬───┐│┌─┐│ 
││0│0 1│0 1 2│││1│1 2│││2││ 
│└─┴───┴─────┘│└─┴───┘│└─┘│ 
└─────────────┴───────┴───┘ 
< S:0 <\ each <\. n 
┌─┬───┬─────┬─┬───┬─┐ 
│0│0 1│0 1 2│1│1 2│2│ 
└─┴───┴─────┴─┴───┴─┘ 

+/ S:0 <\ each <\. n 
0 1 3 1 3 2 

(10&#.) S:0 <\ each <\. n 
0 1 12 1 12 2 

Другими словами, ваш a может быть так:

a =: 1 :'u S: 0 ([: <\&.><\.) y' 

(редактировать) или, как говорит @Tikkanz в комментариях ниже, вы можете избежать S: и использовать более эффективный :

a=: 1 : ';@([: u\&.> <@]\.)' 

или

a=: 1 : ';@(<@(u\)\.)' 
+0

Спасибо, Eelvex. Я не знал S: примитивный. –

+0

альтернатива без использования 'S:' is: 'a =: 1: '; @ ([: u \ &.><@] \.)'' – Tikkanz

+2

или более простой 'a =: 1: '; @ (<@ (u \) \.) '' – Tikkanz