gpt4 book ai didi

Haskell 赋值 - 将字符串拆分为单词所需的方向

转载 作者:行者123 更新时间:2023-12-01 07:20:48 27 4
gpt4 key购买 nike

几周前我们开始写一篇关于 Haskell 的论文,刚刚接到我们的第一个任务。我知道 SO 不喜欢家庭作业问题,所以我不会问怎么做。相反,如果有人能将我推向正确的方向,我将不胜感激。鉴于它可能不是一个特定的问题,在讨论/社区维基中是否更合适?

问题:标记一个字符串,即:“Hello, World!” -> [“你好”,“世界”]
来自 Java 背景,我不得不忘记关于通常的处理方式的一切。问题是我对 Haskell 仍然一无所知。这是我想出的:

module Main where

main :: IO()
main = do putStrLn "Type in a string:\n"
x <- getLine
putStrLn "The string entered was:"
putStrLn x
putStrLn "\n"
print (tokenize x)

tokenize :: String -> [String]
tokenize [] = []
tokenize l = token l ++ tokenize l

token :: String -> String
token [] = []
token l = takeWhile (isAlphaNum) l

第一个明显的错误是什么?
谢谢你。

最佳答案

第一个明显的错误是

tokenize l = token l ++ tokenize l
(++) :: [a] -> [a] -> [a]附加两个相同类型的列表。自 token :: String -> String (和 type String = [Char] ), tokenize 的类型从该行推断是 tokenize :: String -> String .
您应该使用 (:) :: a -> [a] -> [a]这里。

该行中的下一个错误是在递归调用中,您传递了相同的输入 l再一次,所以你有一个无限递归,总是做同样的事情而没有改变。您必须从递归调用的参数的输入中删除第一个标记(以及更多标记)。

另一个问题是您的 token假设输入以字母数字字符开头。

您还需要一个函数来确保您传递给 token 的内容的条件。 .

关于Haskell 赋值 - 将字符串拆分为单词所需的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907801/

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