在编程精灵书之后,在列表列表上遇到困难



在书中,作者正在使用一些 test_data

def test_data do
    [
     [1366225622, 26, 15, 0.125],
     [1366225622, 27, 15, 0.45],
     [1366225622, 28, 21, 0.25],
     [1366229222, 26, 19, 0.081],
     [1366229222, 27, 17, 0.468],
     [1366229222, 28, 15, 0.60],
     [1366232822, 26, 22, 0.095],
     [1366232822, 27, 21, 0.05],
     [1366232822, 28, 24, 0.03],
     [1366236422, 26, 17, 0.025]
    ]
  end

我很难进行模式匹配,以确保test_data始终遵循有4件事列表的正确模式。我该如何完成这项工作?我认为那部分不在练习和课程材料的范围之内,但我正在努力弄清楚。

  def for_loc([], _), do: IO.puts "Please provide valid data and location number!"
  def for_loc([head = [time, loc_id, temp, rain] | tail], loc), do: IO.puts "Valid"
iex(1)> defmodule B do
...(1)>   def for_loc([], _), do: IO.puts "Valid!"
...(1)>   def for_loc([[time, loc_id, temp, rain] | tail], loc), do: for_loc(tail, loc)
...(1)>   def for_loc(_, _), do: IO.puts "Invalid!"
...(1)> end

问题是:当您使用递归时,最后一场匹配将是针对for_loc([], _)(上次迭代中的列表为空。)

什么是无效的,应使用单独的匹配子句处理,如果以前没有人被击中。。。

也就是说,当数组元素不匹配 [time, loc_id, temp, rain]时,第二子句将不匹配,第三子句将

sidenote:我不知道loc(第二个参数)是什么,但是您的test_data根本没有提供它,因此我决定仅默默地使其完好无损。


模式详细信息:test_data传递给for_loc时,将有10个命中 second 匹配子句,然后是 first first 匹配的1次命中条款。像您在评论中指定的那样,一个人通过SMTH,将对 second 子句进行1次命中,并且第三子句的命中 n n n dixch n ntivens n ntivens,也不是第二次匹配。

递归在此处使用,直到列表为空或无效。

相关内容

最新更新