You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell如何将一个函数中接收到的列表传递给另一个函数?

修复方案

你当前的代码存在变量遮蔽问题:valida函数的形参名是r,但where子句中又定义了同名的r变量,导致外层传入的列表参数被覆盖,根本无法访问到外部传入的列表。
只需要做两处简单修改就能达成需求:

  1. 把valida的形参重命名为不冲突的名称(比如lst)
  2. 将duplicador调用位置的固定列表[1, 3, 8, 6]替换为这个形参

修改后的完整代码如下:

module Main where

duplicador :: [Integer] -> [Integer]
duplicador [] = []
duplicador (x:[]) = [x]
duplicador (x:y:zs)
  |  length (x:y:zs) `mod` 2 /= 0 =  x : y*2 : duplicador zs
  |  otherwise = x*2 : y : duplicador zs

valida :: [Integer] -> Bool
valida lst
    | r == 0 = True
    | otherwise = False
        where
        r = sum (duplicador lst) `mod` 10

main = do
  print(valida [1, 3, 8, 6])

注:上述代码还做了一处可选优化,将foldr (\x y -> x+y) 0替换为了Haskell标准库中自带的sum函数,功能完全等价,代码更简洁。

内容的提问来源于stack exchange,提问作者Horácio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:57:03