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

问题描述 投票:0回答:4

Conor Hoekstra 最近解决了 APL 中的 Leetcode 问题 https://youtu.be/QtvvQ7MdwKY 问题是从字符串中取出前

x
个单词
y

在 J 中,使用

&.
(下)和
;:
(文字)我可以想出一个很好的明确的单行代码

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
4个回答
8
投票

使用semiduals(与J902或J903一起引入?),您可以写

4 {.&.(a:`;:) s
。然后
;:
只应用于正确的参数,而稍后仍然执行相反的操作。
u&.(f`a:)
仅适用于左侧参数。
    


3
投票
主要是因为我认为在创建动词时需要将
f

绑定到

x

如果创建带有输入的动词是关键,那么您不应该使用副词吗?

{.

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

本身不是默会(或动词),但

solve
是默会动词。
    


1
投票
4 solve

    


-1
投票

:;!"*!?"""

这是否意味着我不知道的事情? 我非常需要,不知道还能去哪里

© www.soinside.com 2019 - 2024. All rights reserved.