【问题标题】:Amend with multiple indices per substitution in J在 J 中每次替换使用多个索引进行修改
【发布时间】:2021-03-22 23:34:11
【问题描述】:

在 J 中,当你有时如何惯用地修改数组:

substitution0    multipleIndices0
...
substitutionN    multipleIndicesN

(不要混淆:

substitution0    multipartIndex0
...
substitutionN    multipartIndexN

)

例如,我对经典 fizzbuzz 问题的尝试如下所示:

   i=.3 :'<@I.(,*./)(=<.)3 5%~"(0 1)y'
   d=.1+i.20
   'fizz';'buzz';'fizzbuzz' (i d)};/d
|length error
|   'fizz';'buzz';'fizzbuzz'    (i d)};/d

我创建了动词m},其中 m 是 i d,它是 3 个包含不同大小的一维索引列表的框,而我认为 } 期望 m 是包含单个列表的框,每个列表代表一个维度至少与正确参数的等级一样少的单个索引。

这一般是怎么解决的?

【问题讨论】:

    标签: j


    【解决方案1】:
    'fizz';'buzz';'fizzbuzz' (i d)};/d
    

    这有几个问题:

    1. } 的 x 参数是 'fizzbuzz',而不是框列表,因为 } 出现在左侧的 ;s 之前。你的意思是
    ('fizz';'buzz';'fizzbuzz') (i d)};/d
    
    1. } 的 m 参数中的加框数字未按您的预期解释:
       _ _ (1 1;2 2) } i.3 3
    0 1 2
    3 _ 5
    6 7 _
       _ _ (1 1;2 2) } ,i.3 3  NB. your length error
    |length error
    |   _ _    (1 1;2 2)},i.3 3
    
    
    1. 如果您取消 m 参数,您将获得正确类型的索引,但在 x 列表中仍然没有足够的成员来处理:
       _ _ (;1 3;5 7) } i.9
    |length error
    |   _ _    (;1 3;5 7)}i.9
       _ _ _ _ (;1 3;5 7) } i.9
    0 _ 2 _ 4 _ 6 _ 8
    

    这些工作:

       NB. raze m and extend x (fixed)
       i=.3 :'<@I.(,*./)(=<.)3 5%~"(0 1)y'
       d=.1+i.20
       ((;# each i d)#'fizz';'buzz';'fizzbuzz') (;i d)};/d
    +-+-+----+-+----+----+-+-+--------+----+--+----+--+--+----+--+--+--------+--+----+
    |1|2|fizz|4|fizz|buzz|7|8|fizzbuzz|buzz|11|fizz|13|14|buzz|16|17|fizzbuzz|19|fizz|
    +-+-+----+-+----+----+-+-+--------+----+--+----+--+--+----+--+--+--------+--+----+
    
    
       NB. repeatedly mutate d
       i=.3 :'<@I.(,*./)(=<.)3 5%~"(0 1)y'
       d=.;/1+i.20
       ('fizz';'buzz';'fizzbuzz'),.(i ;d)
    +--------+--------------+
    |fizz    |2 5 8 11 14 17|
    +--------+--------------+
    |buzz    |4 9 14 19     |
    +--------+--------------+
    |fizzbuzz|14            |
    +--------+--------------+
       0$(3 : 'd =: ({.y) (1{::y) }d')"1 ('fizz';'buzz';'fizzbuzz'),.(i ;d)
       d
    +-+-+----+-+----+----+-+-+----+----+--+----+--+--+--------+--+--+----+--+----+
    |1|2|fizz|4|buzz|fizz|7|8|fizz|buzz|11|fizz|13|14|fizzbuzz|16|17|fizz|19|buzz|
    +-+-+----+-+----+----+-+-+----+----+--+----+--+--+--------+--+--+----+--+----+
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2013-11-04
      • 2011-08-15
      • 2018-08-19
      相关资源
      最近更新 更多