4

Conor Hoekstra 最近解决了 APL 中的一个 Leetcode 问题https://youtu.be/QtvvQ7MdwKYx问题是从一个字符串中取出第一个单词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

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

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

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

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

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

4

2 回答 2

8

使用对偶(J902 或 J903 引入?)您可以编写4 {.&.(a:`;:) s. 然后;:仅应用于正确的参数,而稍后仍会进行逆操作。u&.(f`a:)仅适用f于左参数。

于 2021-04-06T20:50:42.737 回答
3

主要是因为我认为在动词的创建过程中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默契动词。

于 2021-04-06T06:24:20.350 回答