默写 4 : 'x&{.&.;: y'

bob*_*bob 4 j pointfree tacit-programming

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

在 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
Run Code Online (Sandbox Code Playgroud)

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

   13 : 'x&{.&.;: y'
4 : 'x&{.&.;: y'
Run Code Online (Sandbox Code Playgroud)

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

   solve2=. (;:^:_1)@:({. ;:)
   4 solve2 s
Hello how are you
Run Code Online (Sandbox Code Playgroud)

但这并不像默认版本那样漂亮4 : 'x&{.&.;: y'
任何人都有一个非常默认的解决方案4 : 'x&{.&.;: y'

xas*_*ash 8

使用半对偶(与 J902 或 J903 一起引入?),您可以编写4 {.&.(a:`;:) s. 然后;:只应用于正确的论点,而稍后仍然做相反的事情。u&.(f`a:)f仅适用于左参数。