[英]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.