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