簡體   English   中英

如何在 Haskell 中編寫代碼以從列表中過濾掉 Nothing 值

[英]How to write a code in Haskell to filter out Nothing values from a list

我希望“映射一個列表,如果 map function 什么都不返回,則將其刪除”。 我正在做如下: -

    filteredList f l = map to_int (mapMaybe f l)

這里的to_int function如下

    to_int some_value = case some_value of
      Just a -> a
      Nothing -> 0

這雖然在邏輯上對我來說是正確的,但並沒有像它應該的那樣工作。 有人可以在這里解釋我錯在哪里嗎?

您嘗試實施的內容已經存在。 實際上, mapMaybe:: (a -> Maybe b) -> [a] -> [b]將采用 function 和一個列表,對列表的元素調用 function,並檢索返回的項目Just … object。這些項目從Just數據構造函數中解包。

這個 function 在base package中定義,但不在Prelude中。 這意味着您應該從Data.Maybe模塊導入它:

import Data.Maybe(mapMaybe)

filteredList :: (a -> Maybe b) -> [a] -> [b]
filteredList = mapMaybe

例如,您可以將其專門化為a ~ b ~ Integer ,從而將其用作(Integer -> Maybe Integer) -> [Integer] -> [Integer]

您也可以自己實現這個 function,例如使用列表理解:

filteredList :: (a -> Maybe b) -> [a] -> [b]
filteredList f l = [ y | Just y <- map f l ]

因此,我們在這里使用模式匹配來確保我們收到一個Just x模式。 如果模式不匹配,則跳過此項。 我們還從Just y模式中解包y ,並將其用作要放入列表中的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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