Loops 如何在元组上使用Data.List.iterate
表达式Loops 如何在元组上使用Data.List.iterate,loops,haskell,tuples,Loops,Haskell,Tuples,表达式iterate(1+1的计算结果为[1,2,3,…] 我可以做一些类似于迭代((1+)(1+)(1,1)的事情,这样我就可以得到[(1,1),(2,2),…]?如果是,语法是什么?此语法应该可以正常工作: iterate (\(x,y) -> (x+1, y+1)) (1, 1) 还有许多其他方法可以剥这只猫的皮: iterate (bimap (1+) (1+)) (1, 1) iterate ((1+) *** (1+)) (1, 1) map (\x -> (x,x))
iterate(1+1
的计算结果为[1,2,3,…]
我可以做一些类似于迭代((1+)(1+)(1,1)的事情,这样我就可以得到
[(1,1),(2,2),…]
?如果是,语法是什么?此语法应该可以正常工作:
iterate (\(x,y) -> (x+1, y+1)) (1, 1)
还有许多其他方法可以剥这只猫的皮:
iterate (bimap (1+) (1+)) (1, 1)
iterate ((1+) *** (1+)) (1, 1)
map (\x -> (x,x)) $ iterate (1+) 1
join (,) <$> iterate (1+) 1
[(x, x) | x <- [1..]]
迭代(bimap(1+)(1+)(1,1)
迭代((1+)***(1+)(1,1)
映射(\x->(x,x))$iterate(1+)1
连接(,)迭代(1+)1
[(x,x)|x这种语法应该可以很好地工作:
iterate (\(x,y) -> (x+1, y+1)) (1, 1)
还有许多其他方法可以剥这只猫的皮:
iterate (bimap (1+) (1+)) (1, 1)
iterate ((1+) *** (1+)) (1, 1)
map (\x -> (x,x)) $ iterate (1+) 1
join (,) <$> iterate (1+) 1
[(x, x) | x <- [1..]]
迭代(bimap(1+)(1+)(1,1)
迭代((1+)***(1+)(1,1)
映射(\x->(x,x))$iterate(1+)1
连接(,)迭代(1+)1
[(x,x)| x扩展Daniel Wagner的答案--Data.List
的iterate
将函数作为第一个参数。iterate
的类型签名为
(a -> a) -> a -> [a]
这意味着第一个参数中的函数只需返回其接收的相同类型。这可以是匿名函数,如Daniel的回答所示,也可以是函数名。例如,他的示例可以使用如下命名函数重写:
import Data.List (iterate)
addOne (x, y) = (x + 1, y + 1)
iterate addOne (1, 1)
扩展Daniel Wagner的答案--Data.List
的iterate
将函数作为第一个参数。iterate
的类型签名为
(a -> a) -> a -> [a]
这意味着第一个参数中的函数只需返回其接收的相同类型。这可以是匿名函数,如Daniel的回答所示,也可以是函数名。例如,他的示例可以使用如下命名函数重写:
import Data.List (iterate)
addOne (x, y) = (x + 1, y + 1)
iterate addOne (1, 1)
谢谢:)那正是我要找的。谢谢:)那正是我要找的