gpt4 book ai didi

list - 从无限列表中获取所有长度为 4 的子串

转载 作者:行者123 更新时间:2023-12-03 21:30:38 25 4
gpt4 key购买 nike

我对 Haskell 很陌生,我正在尝试解决以下问题:

我有一个函数,它生成一个无限长度的字符串列表。但是一定长度的字符串数量是有限制的。

现在我想提取具有特定长度 n 的列表的所有子字符串。不幸的是,我做了很多研究并尝试了很多东西,但没有任何效果对我有用。

我知道filter()不起作用,因为它会检查列表的每个部分并导致无限循环。

这是我生成无限列表的函数:

allStrings =  [ c : s | s <- "" : allStrings, c <- ['R', 'T', 'P']]

我已经试过了:
allStrings = [x | x <- [ c : s | s <- "" : allStrings, 
c <- ['R', 'T', 'P']], length x == 4]

没有终止。

谢谢你的帮助!

最佳答案

这个

allStrings4 = takeWhile ((== 4) . length) . 
dropWhile ((< 4) . length) $ allStrings

诀窍。

它有效,因为您的(第一个) allStrings定义巧妙地生成所有包含 'R' 的字符串, 'T' , 和 'P'以非递减的长度顺序以富有成效的方式发送信件。

不要试图将所有内容都塞进一个定义中,而是将您的关注点分开!首先为更一般的问题构建一个解决方案(这是您的 allStrings 定义),然后用它来解决更受限制的问题。这通常会简单得多,尤其是对于 Haskell 的惰性求值。

我们只需要注意我们的流总是富有成效的,永远不会卡住。

关于list - 从无限列表中获取所有长度为 4 的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58271345/

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