我正在尝试使用列表理解来构建0的列表。但我也想在列表中选择索引1。例如myList 5 2 = [0,1,0,0,0]其中5是元素数,2是索引。
myList el index = [0 | n <- [1..el], if n == index then 1 else 0]
但这会导致错误。
答案 0 :(得分:4)
修复
的最小变化myList el index = [if n == index then 1 else 0 | n <- [1..el]]
请注意,|
的 left 的内容是生成列表元素的内容。对[ 0 | ...]
形式的列表理解仅生成零,而...
部分仅决定结果列表的长度。
此外,在您的代码中,编译器会抱怨,因为在|
的 right ,我们只允许生成器(例如n <- someList
),条件(例如x > 23
)或新定义(let y = ...
)。在您的代码中,if ...
被解释为条件,为此它应该计算为布尔值,但then 1
使结果成为数字,从而触发类型错误。
另一种解决方案可能是
myList el index = replicate (index-1) 0 ++ [1] ++ replicate (el-index) 0
其中replicate m 0
生成一个m
个零的列表,++
连接。
最后,请注意您的index
是基于1的。在许多编程语言中,这是非常规的,因为基于0的索引更常用。