簡體   English   中英

Haskell添加兩個列表模式匹配

[英]Haskell add two list pattern matching

所以我在GHCI上有以下內容

>let addlist [] [] = []
>let addlist (a:as) (b:bs) = (a+b) : addlist as bs
>let x = [1..5]
>let y = [6..10]
>addlist x y

最后一行給了我:[7,9,11,13,15 ***異常:: 1:5-49:函數addlist中的非詳盡模式

我只是想把兩個列表一起添加到一個列表...... :(

我做錯了什么?

謝謝

請注意,如果列表大小不同,您仍然會遇到“非詳盡模式匹配”的問題! 這是一個適用於所有情況的解決方案:

addList [] _ = []
addList _ [] = []
addList (a:as) (b:bs) = (a+b) : addList as bs

不是兩個模式,其中任何一個列表是空的!

最后要注意的是:在GHCi中編寫多行定義很痛苦 - 在一些編輯器中將它們寫入.hs文件並使用:load MyFile.hs:reload在GHCi中:reload

如果你想在let使用模式匹配來定義一個函數,你不能像你一樣使用每個模式一個 - 這將簡單地定義兩個獨立的函數(第二個映射第一個)。

你需要使用單個let並使用換行符分隔模式,或者在ghci中你不能使用換行符,分號。 所以:

let addlist [] [] = []; addlist (a:as) (b:bs) = (a+b) : addlist as bs

請注意,您有一個內置函數zipWith用於以給定函數的形式合並兩個列表,因此您可以編寫

addList xs ys = zipWith (+) xs ys

或更短

addList = zipWith (+)

暫無
暫無

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

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