gpt4 book ai didi

functional-programming - APL - 如何找到字符串向量中最长的单词?

转载 作者:行者123 更新时间:2023-12-04 08:40:47 24 4
gpt4 key购买 nike

我想在字符串向量中找到最长的单词。使用 APL 我知道形状函数将返回字符串的长度,例如

⍴ 'string' ⍝ returns 6

reduce 函数允许我沿向量映射二元函数,但由于形状是一元的,所以这将不起作用。在这种情况下如何映射形状函数?例如:

如果向量定义为:

lst ← 'this is a string'

我想这样做:

⍴'this' ⍴'is' ⍴'a' ⍴'string'

最佳答案

“典型”方法是将其视为分段(或:分隔)字符串并在其前面加上分隔符 (空白)并将其传递给 dfn 以进行进一步分析:

{}' ',lst

然后 fn 查找分隔符并使用它来构建单词向量:

      {(⍵=' ')⊂⍵}' ',lst
┌─────┬───┬──┬───────┐
│ this│ is│ a│ string│
└─────┴───┴──┴───────┘

让我们删除空白:

      {1↓¨(⍵=' ')⊂⍵}' ',lst
┌────┬──┬─┬──────┐
│this│is│a│string│
└────┴──┴─┴──────┘

然后你“只”需要计算每个向量的长度:

{1↓¨(⍵=' ')⊂⍵}' ',lst

这是对您的请求的直接执行。但是,如果您对子字符串本身不感兴趣,而只对“非空白段”的长度感兴趣,则更“APLy”的解决方案可能是使用 bool 值(通常最有效):

      lst=' '
0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0

所以这些是分隔符的位置 - 它们出现在哪里?

      ⍸lst=' '
5 8 10

但我们也需要尾随空白 - 否则我们会错过文本的结尾:

      ⍸' '=lst,' '
5 8 10 17

所以这些(减去前面空白的位置)应该给出段的长度:

      {¯1+⍵-0,¯1↓⍵}⍸' '=lst,' '
4 2 1 6

这仍然有些天真,可以用更高级的方式表达 - 我将其留作“读者练习”;-)

关于functional-programming - APL - 如何找到字符串向量中最长的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55514234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com