[英]Haskell - Recursive function, eating a string list
我是Haskell的新手,尝试在构建个人项目时学习一些东西。
我定义了一个函数:
pacHead :: String -> String
pacHead textrow =
let first = head textrow
in if first /= '"'
then pacHead (tail textrow)
else textrow
我希望它接受一个字符串,验证它的头部是否是某个字符(“),并“吃掉”该字符串,直到删除该字符为止。
IN:bla bla bla bla bla“ citation” bla bla-> OUT:citation” bla bla
但是,当我将其应用于字符串列表(使用map)时,它只会返回一个空列表。
let firstPac = map pacHead linesList
如何在不使用库的情况下修复/改进此功能?
首先请注意,您的功能是:
pacHead :: String -> String
pacHead = tail . dropWhile (/= '"')
Prelude> let pacHead = tail.dropWhile (/= '"')
Prelude> pacHead "bla bla bla bla \"citation\" bla bla"
"citation\" bla bla"
递归版本(与patternt匹配):
pacHead :: String -> String
pacHead "" = ""
pacHead (x:xs) | x == '"' = xs
| otherwise = pacHead xs
首先检查字符串是否为空,然后返回空字符串,否则yo模式匹配该字符串, x
成为第一个字符, xs
成为剩余的字符串,如果x等于"
,则返回剩余的字符串,否则继续计算串。
在哪里可以找到有关函数定义(特别是递归)的好例子,这些例子是通过字符串列表而不是虚拟数字完成的?
关于列表的几乎所有示例都可以应用于字符串,因为字符串只是[char]
的type alias
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.