使用lambda在haskell中实现list函数

时间:2015-10-12 22:59:44

标签: haskell lambda

我想使用lambda创建一个函数,该函数将参数列表作为参数获取,并返回第一个列表的第一个元素的列表。例如:

cd MeDevelopment\ /

我正在使用这样的lambda,但它似乎不起作用:

function [ (1,2), (3,4) (5,6) ] = [1,3,5]

也许我做错了。有人能帮助我吗?

1 个答案:

答案 0 :(得分:4)

你的lambda表达式永远不会被调用,你只定义一个lambda表达式,你可以用它来调用它:

firstall ((a,b) : xs) = ((\(a,b) -> a) (a,b) : firstall(xs))

既然你在lambda表达式中也使用ab,这就是问题,一个更易于访问的版本是:

firstall ((a,b) : xs) = ((\(c,d) -> c) (a,b) : firstall(xs))

换句话说,您将(c,d)(a,b)“统一”。您可以在lambda表达式中使用ab,但它可以为您自己创造。

话虽如此,您可以更轻松地执行此任务:

firstall = map fst

简称:

firstall = map (\(a,b) -> a)

请注意,您不需要为firstall指定输入参数,因为map fst是一个将列表作为输入的函数。

最后,正如@DanielWagner建议的那样,你可以简单地删除lambda表达式:

firstall ((a,_) : xs) = (a : firstall(xs))

下划线(_)表示您对该值不感兴趣:您只需要元组的第一个元素。