【问题标题】:Write 4 : 'x&{.&.;: y' tacitly默写 4 : 'x&{.&.;: y'
【发布时间】:2021-07-01 22:12:54
【问题描述】:

Conor Hoekstra 最近解决了 APL 中的一个 Leetcode 问题https://youtu.be/QtvvQ7MdwKY 问题是从字符串y 中取出第一个x 单词

在 J 中,使用 &. (Under) 和 ;: (Words) 我可以想出一个很好的明确的单行符

solve =. 4 : 'x&{.&.;: y'         NB. Box words in y -> take first x-> unbox words in result while retaining spaces between
   s=. 'Hello how are you Contestant'
   4 solve s
Hello how are you

我遇到的麻烦是找到仍然包含&.的默认版本,主要是因为我认为x需要在创建动词时绑定到{.。 这也是魔术13 : 转换没有帮助的示例

   13 : 'x&{.&.;: y'
4 : 'x&{.&.;: y'

我可以通过使用;:^:_1创建;:的逆来默认解决它

   solve2=. (;:^:_1)@:({. ;:)
   4 solve2 s
Hello how are you

但这并不像4 : 'x&{.&.;: y' 的默认版本那么漂亮。
有人对4 : 'x&{.&.;: y' 有一个相当默契的解决方案吗?

【问题讨论】:

    标签: j pointfree tacit-programming


    【解决方案1】:

    主要是因为我认为x在动词的创建过程中需要绑定{.

    如果用输入创建动词是关键,你不应该使用副词吗?

       solve =: 1 : 'm&{.&.;:'
       4 solve
    4&{.&.;:
       (4 solve ,: 2 solve) 'Hello how are you Contestant'
    Hello how are you
    Hello how        
    

    solve 本身不是默契(或动词),但4 solve 是默契动词。

    【讨论】:

    • 好的,谢谢朱利安。我不认为副词是一种有效的默认解决方案。很好的答案。
    • ...和_3 grab_words 'are you ready to go',如果你想从字符串末尾获取单词。
    【解决方案2】:

    使用semiduals(与J902 或J903 一起引入?)您可以写4 {.&.(a:`;:) s。然后;: 仅应用于正确的参数,而稍后仍会执行相反的操作。 u&.(f`a:) 将仅在左侧参数上应用 f

    【讨论】:

    • 哇,我不知道这个。每次我转身这种语言都会让我感到惊讶,我已经玩了 20 年了!出去玩一会儿。谢谢xash
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多