簡體   English   中英

Haskell-遞歸函數,使用字符串列表

[英]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
  1. 如何在不使用庫的情況下修復/改進此功能?
  2. 在哪里可以找到有關函數定義(特別是遞歸)的良好介紹,其中包含在字符串列表而不是虛擬數字上的示例?

如何在不使用庫的情況下修復/改進此功能?

首先請注意,您的功能是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM