haskell - 如何在 lambda 参数上运行函数以在 Haskell 的嵌套 lambda 中使用?
问题描述
背景(来自评论):
对于两个条件,我不想每个元素使用相同的函数两次,\x -> f (g x) == .. && f (g x) == ..
所以我试图找到一种方法来做\y -> y == .. && y -> == ..
where y = f (g x)
。
原帖:
我想过滤一个列表,该列表需要在测试多个条件之前对每个元素运行函数。
我想创建一个遵循这个结构的表达式:
filter (\x -> (\y -> y == cond0 && y == cond1) f . g) $ ..
where为评估f . g x
提供输入。y
实际代码如下:
filter (\x -> (\y ->
fromJust (accessorFunc0 y) == foo && compareFunc bar (accessorFun1 y)) f . g) $ accessorFun2 dataStruc
但我也试过:
filter ((\x ->
fromJust (accessorFunc0 y) == foo && compareFunc bar (accessorFun1 y)) f . g) $ accessorFun2 dataStruc
这也会产生编译器错误。
任何帮助深表感谢!
解决方案
您在这里使用参数调用 (\y -> ...) f
:
filter (\x -> (\y ->
fromJust (accessorFunc0 y) == foo && compareFunc bar (accessorFun1 y)) f . g) $ accessorFun2 dataStruc
此外,\x ->
也无济于事,因为组合已经产生了功能。
您可能正在寻找类似的东西
filter (
(\y -> fromJust (accessorFunc0 y) == foo && compareFunc bar (accessorFun1 y))
. f
. g) $ accessorFun2 dataStruc
wheref
由 with\y -> ...
而不是作为参数传递。
当心那fromJust
是部分的,并且会使程序在Nothing
.
推荐阅读
- c# - C# WPF:无法通过类将 texbox.Text 连接到 label.Content
- node.js - 如何在nodejs中设置或更改用户变量?
- mongodb - 在单个查询中计算外部和内部嵌入数组
- firebase - 如何返回上传到 Firebase 存储的图片的下载 URL
- sql - 在列表 ASP.NET MVC 中搜索和过滤
- php - 如何将图片上传到文章中?
- python-3.x - 如何使用 ffmpeg 提取帧序列并使用 subprocess.Popen 获取
- scala - 为什么变量 newP2Points 的计算方式与 newP1Points 不同?
- java - 使用组合框搜索时出现 ArrayIndexOutOfBoundsException
- laravel - Laravel IDE 助手