Zul*_*dur 3 haskell list-comprehension
在Haskell中的并行列表理解中,我在尝试使用防护时遇到了问题.
largestPalindrome :: Int -> Int
largestPalindrome x = maximum [ a*b
| a <- [x,x-1..1]
| b <- [x,x-1..1]
, isPalindrome (a*b) ]
Run Code Online (Sandbox Code Playgroud)
显示的错误是
Variable not in scope: a :: Int
Run Code Online (Sandbox Code Playgroud)
并行理解使用拉链表示法扩展列表理解.理解力
Run Code Online (Sandbox Code Playgroud)[ e | quals1 | ... | qualsN ]可以贬低
Run Code Online (Sandbox Code Playgroud)zipWithN (\ p1 ... pN -> e) [p1 | quals1] ... [pN | qualsN]where
pi是由...定义qualsi和使用的变量的元组e.
所以,从你的例子来看,[a*b |a<- [x,x-1..1] | b <- [x,x-1..1] , isPalindrome (a*b)]大致相当于
zipWith (\a b -> a*b)
[ a | a<-[x,x-1..1] ]
[ b | b <- [x,x-1..1], isPalindrome (a*b) ]
Run Code Online (Sandbox Code Playgroud)
很清楚为什么a不在最后一个列表理解的范围内.直觉上,您应该将每个|定界部分视为完全独立于其他部分.任何滤波操作将要被绑定到唯一一个这些零件.