【发布时间】:2020-05-21 22:20:47
【问题描述】:
我正在尝试创建一个 Haskell 函数,其中输入是整数列表,输出是所述列表中相邻元素乘积的新列表。这是我当前的代码:
productsList :: [Integer] -> [Integer]
productsList [] = []
productsList (x:[]) = []
productsList (x:y:xs) = [x * y] ++ productsList xs
但是,当我在 GHC 中检查它时,虽然它编译得很好,但输出是错误的。例如,当我尝试:
productsList [1..3],输出为:[2],这显然只是列表中前两个元素的乘积(这里的正确答案应该是[2, 6])在我看来,可能的问题可能在于当有 x 但没有 y 时,我的案例不包括在内,尽管我认为它已在 productsList (x:[]) = [] 行中涵盖
谁能帮我找出导致这种输出变化的原因?
【问题讨论】:
-
什么是
test xs?我认为这是productsList xs的错字。 -
顺便说一句,
[x*y] ++ test xs等价于(x*y) : (test xs),更简单,可以更快一些。 -
@bradrn 你是对的。谢谢,我已经编辑了 OP。
标签: list function haskell recursion