【问题标题】:how to write several statements in the same line in J如何在J中的同一行中编写多个语句
【发布时间】:2016-10-31 16:11:25
【问题描述】:

我是新手,想学J。有一个问题我有一段时间了。

J 中的语句分隔符是什么? J可以在同一行写几条语句吗?

【问题讨论】:

    标签: j


    【解决方案1】:

    虽然 J 中的语句分隔符是换行符,但您可以使用始终返回其左参数的左动词 (dyadic [) 将赋值语句分隔在一行上。由于 J 从右到左解析,Left 动词有效地分解语句,因为右参数被丢弃(尽管仍然会出现赋值等副作用)。

       2 + 3 [ t=. 3 + 4
    5
      t
    7
    

    所以在这种情况下,t 被分配 7,然后 3 [ t 被评估返回 3,它被添加到 2。相反,如果你使用 Right (dyadic ]),你可能会在上游游泳,得到不同的结果。

       2 + 3 ] t=. 6 + 4
    12
       t
    10
    

    这里 t 被赋值为 10,而 3 ] t 的结果是 t,其值为 10,然后将其与 2 相加。

    希望这会有所帮助,鲍勃

    【讨论】:

      【解决方案2】:

      正如MPelletier 所说,没有语句运算符,但您可以使用“赋值技巧”:在您第一次使用语句时(从右到左)将语句的结果分配给变量它。例如:

      而不是这个:

      a =: 15
      f =: (+/) % # i.a
      g =: (-/) % # i.a
      h =: ((-:g) * (+:f)) ^ ((-:f) * (+:g))
      

      你可以这样写:

      h =: ((-:g) * (+:f)) ^ ((-: f =. (+/) % #i.a) * (+: g =. (-/) % # i.a=.15))
      

      或者,而不是:

      mean =: (+/) % #
      f =: mean i.15
      

      这个:

      f =: (mean =: (+/) % #) i.15
      

      【讨论】:

      • :/ 这只是链接定义,以及巧妙、谨慎地使用括号。你可以在 C 中做同样的事情,但是 C 也允许你分离完全独立的语句。不过没有酸葡萄。
      • @MPelletier 你是绝对正确的;我只是将此回复作为评论,但评论太长了。而且,您不能在 standard C. 中嵌套函数
      • @MPelletier, @user1951460: @bob 有正确的答案。 a =. 3 *2 [ z=. 8 [ (b=: 3 :'+:y') [ c=. *:9.
      【解决方案3】:

      没有语句分隔符。或者更确切地说,语句分隔符是换行符。

      【讨论】:

        【解决方案4】:

        替代Do ".,您可以使用Explicit Verb 3 : 创建一个匿名动词并调用它。这样你就不用担心临时变量泄露了。

        对于多条语句,你有办法:

        1. 反转语句并加入[(例如'bar =. foo + 54 [ foo =. 42'
        2. 使用换行符连接(例如'foo =. 42' , LF , 'bar =. foo + 54'
        3. 表格形式的代码(例如'foo =. 42' ,: 'bar =. foo + 54')。

        Eelvex's example:

           (3 : 'h =. ((-:g) * (+:f)) ^ ((-:f) * (+:g)) [ g =. (-/) % # i.a [ f =. (+/) % # i.a [ a =. 15') ''
        0.976216
           (3 : ('a =. 15' ,LF, 'f =. (+/) % # i.a' ,LF, 'g =. (-/) % # i.a' ,LF, 'h =. ((-:g) * (+:f)) ^ ((-:f) * (+:g))')) ''
        0.976216
           (3 : ('a =. 15' , 'f =. (+/) % # i.a' , 'g =. (-/) % # i.a' ,: 'h =. ((-:g) * (+:f)) ^ ((-:f) * (+:g))')) ''
        0.976216
        

        不知何故,3 : <...> 在通常的从右到左执行之前被评估,所以你需要为: 的右手加上括号。使用此行为,您可以省略 3 : <...> 周围的括号:

           3 : '6 * 9' ''
        54
        

        【讨论】:

          猜你喜欢
          • 2010-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-30
          • 2016-06-28
          • 2017-08-20
          相关资源
          最近更新 更多