我想使用lambda创建一个函数,该函数将参数列表作为参数获取,并返回第一个列表的第一个元素的列表。例如:
cd MeDevelopment\ /
我正在使用这样的lambda,但它似乎不起作用:
function [ (1,2), (3,4) (5,6) ] = [1,3,5]
也许我做错了。有人能帮助我吗?
答案 0 :(得分:4)
你的lambda表达式永远不会被调用,你只定义一个lambda表达式,你可以用它来调用它:
firstall ((a,b) : xs) = ((\(a,b) -> a) (a,b) : firstall(xs))
既然你在lambda表达式中也使用a
和b
,这就是问题,一个更易于访问的版本是:
firstall ((a,b) : xs) = ((\(c,d) -> c) (a,b) : firstall(xs))
换句话说,您将(c,d)
与(a,b)
“统一”。您可以在lambda表达式中使用a
和b
,但它可以为您自己创造。
话虽如此,您可以更轻松地执行此任务:
firstall = map fst
简称:
firstall = map (\(a,b) -> a)
请注意,您不需要为firstall
指定输入参数,因为map fst
是一个将列表作为输入的函数。
最后,正如@DanielWagner建议的那样,你可以简单地删除lambda表达式:
firstall ((a,_) : xs) = (a : firstall(xs))
下划线(_
)表示您对该值不感兴趣:您只需要元组的第一个元素。