【发布时间】:2017-02-06 10:37:18
【问题描述】:
如果我有这些功能:
add :: Int -> Int -> Int
add a b = a+b
map :: (a->b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
当我调用map (add 1) [1,2,3] 时,输出为[2,3,4],但在这种情况下,Haskell 的评估如何工作?
我的想法:
它与第二个模式匹配,因为 map 是一个函数,而 [1,2,3] 是一个列表。
那么我们会有:
map (add 1) [1,2,3]
= add 1 : map add [2,3]
= add 1 : add 2 : map add [3]
= add 1 : add 2 : add 3 : map add []
= add 1 : add 2 : add 3 : []
但这不可能是真的。有人可以帮帮我吗?
【问题讨论】:
-
为什么不能这样呢?这正是发生的事情。 (
add 1 1、add 1 2和add 1 3除外。) -
哦,我忘记了每一行的 x,所以我会加 1 1:加 1 2:加 1 3:[]。那么它是有道理的,谢谢!
标签: haskell evaluation