我正在尝试创建一个 Haskell 函数,其中输入是整数列表,输出是所述列表中相邻元素的乘积的新列表。这是我当前的代码:
productsList :: [Integer] -> [Integer]
productsList [] = []
productsList (x:[]) = []
productsList (x:y:xs) = [x * y] ++ productsList xs
Run Code Online (Sandbox Code Playgroud)
但是,当我在 GHC 中检查它时,虽然它编译正常,但输出是错误的。例如,当我尝试:时
productsList [1..3],输出是:[2],这显然只是列表中前两个元素的乘积(这里的正确答案应该是[2, 6])对我来说,似乎可能的问题在于我的情况当有 x 但没有 y 时不覆盖,虽然我认为它被覆盖在行中productsList (x:[]) = []
谁能帮我弄清楚是什么导致了这种输出变化?