递归函数内的枚举计数

Pla*_*Pro 1 recursion haskell

我想做一些像:

>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)

有可能改善这个功能吗?因为我不想再添加一个函数,所以我认为支持函数是唯一的方法,对吧?

Fra*_*nky 5

不要害怕写支持功能,事实上,把它看作是机会:为什么任意初始值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] ++ ...