Haskell中列表推导实现的replicate'函数为何存在未使用的y变量?
问题解答
这段Haskell代码是实现replicate函数的功能——生成一个包含n个x元素的列表。
这里的变量y本质是个占位符,作用只有一个:让列表推导的生成器执行n次。
列表推导的语法规则是[输出表达式 | 生成器],其中生成器y <- [1..n]会遍历从1到n的所有数值,每遍历一个值,就会执行一次输出表达式x。因为我们只需要输出n次x,完全不需要用到y的具体值,所以它在这里只是满足语法要求的“傀儡变量”。
举个实际例子,当调用replicate' 3 "hello"时,生成器会依次取1、2、3三个值,每次都输出"hello",最终得到["hello", "hello", "hello"]——整个过程里y的值从来没被用到过。
Haskell社区里有个更清晰的写法,就是用下划线_代替y:
replicate' n x = [x|_ <- [1..n]]
下划线明确告诉阅读代码的人:这个变量是故意不用的,只是占位用的,比用y更具可读性。
内容的提问来源于stack exchange,提问作者hask1023
相关产品推荐
相关产品推荐

