我想做一些像:
>enumerate ["banana", "potato", "ice"]
[(1, "banana"), (2, "potato"), (3, "ice")]
Run Code Online (Sandbox Code Playgroud)
我写:
enumerate :: [String] -> [(Int, String)]
enumerate [] = []
Run Code Online (Sandbox Code Playgroud)
我如何控制/管理int计数器?没有支持功能有没有办法做到这一点?
更新:我知道Zip功能.但是对于学习问题,我想实现自己的zip功能.
更新2:当前代码
这是我到目前为止所做的,使用支持功能.考虑到:
1)我想实现自己的zip功能;
2)我不想改变函数struct:
enumerate :: [String] -> [(Int, String)]
enumerate :: [String]->[(Int,String)]
enumerate [] = []
enumerate list = aux 1 list
aux :: Int->[String]->[(Int, String)]
aux _ [] = []
aux i (x:xs) = [(i, x)] ++ aux (i+1) xs
Run Code Online (Sandbox Code Playgroud)
有可能改善这个功能吗?因为我不想再添加一个函数,所以我认为支持函数是唯一的方法,对吧?
不要害怕写支持功能,事实上,把它看作是机会:为什么任意初始值1?为什么没有功能
>enumerateFrom 42 ["banana", "potato", "ice"]
[(42, "banana"), (43, "potato"), (44, "ice")]
Run Code Online (Sandbox Code Playgroud)
一旦你拥有了,enumerate很容易.
编辑:要么给你的aux功能一个真正的名字,恕我直言,enumerateFrom是好还是将其移动到一个where条款,如果你已经知道了.并听取chi,x : ...而不是使用[x] ++ ...