此方法会传回新的清单,此清单是透过将第二个参数套用为每个清单成员的模数算子而形成,其中包含两个参数:列表和数值。我目前的方法只对第一个元素而不是所有元素应用模操作数。我尝试使用cons运算符来构建新列表。
modList([Head | Tail], Num) -> [Head rem Num | Tail].
ybzsozfc1#
你的思路是对的,你正在写一个递归函数,所以接下来你需要做两件事:1.递归步骤:在函数体的某个位置,需要将相同的函数应用于列表的其余部分(例如modList(Tail))。1.基础案例:如果重复应用递归步骤,因为每次迭代都要从列表中删除一个元素,您将得到一个与函数头模式不匹配列表([Head | Tail])。这将导致function_clause错误,您可以通过......当然......为该列表添加一个子句来修复该错误。因为该子句可能不需要递归(也就是说,它将返回一个硬编码的值),这将关闭递归循环,您的递归函数将完成。额外提示:在Erlang中,函数名、模块名和原子通常使用snake_case而不是camelCase更符合习惯。换句话说,更常用的函数名是mod_list/2。
modList(Tail)
[Head | Tail]
function_clause
snake_case
camelCase
mod_list/2
5vf7fwbs2#
你可以这样做
> Num = 5. 5 > [X rem Y || X <- [1, 2, 3, 4, 5, 6, 7], Y <- [Num]]. [1,2,3,4,0,1,2]
2条答案
按热度按时间ybzsozfc1#
你的思路是对的,你正在写一个递归函数,所以接下来你需要做两件事:
1.递归步骤:在函数体的某个位置,需要将相同的函数应用于列表的其余部分(例如
modList(Tail)
)。1.基础案例:如果重复应用递归步骤,因为每次迭代都要从列表中删除一个元素,您将得到一个与函数头模式不匹配列表(
[Head | Tail]
)。这将导致function_clause
错误,您可以通过......当然......为该列表添加一个子句来修复该错误。因为该子句可能不需要递归(也就是说,它将返回一个硬编码的值),这将关闭递归循环,您的递归函数将完成。额外提示:在Erlang中,函数名、模块名和原子通常使用
snake_case
而不是camelCase
更符合习惯。换句话说,更常用的函数名是mod_list/2
。5vf7fwbs2#
你可以这样做