函数式编程:什么是“不当列表”?


狗头军师
2025-03-23 09:14:51 (3天前)

有人可以解释什么是“不当列表”吗?

2 条回复
  1. 1# v-star*위위 | 2020-07-31 15-42

    我认为@Vijay的答案是迄今为止最好的答案,我只想对它进行错误描述。

    Erlang中的对(约束单元)写为[Head|Tail],nil写为[]。头和尾是什么没有限制,但是如果使用尾链接更多的cons单元,则会得到一个列表。如果最终的尾巴[],那么你得到一个正确的名单。列表中有特殊的语法支持

    [1|[2|[3|[]]]]
    被写成

    [1,2,3]
    和不适当的清单

    [1|[2|[3|4]]]
    被写成

    [1,2,3|4]
    这样您就可以看到区别。与正确/不正确的列表进行匹配相对容易。因此,一个长度函数len用于适当的列表:

    1. len([_|T]) -> 1 + len(T);
    2. len([]) -> 0.

    我们明确匹配终止的位置[]。如果给出的列表不正确,将产生错误。虽然last_tail返回列表最后尾的函数也可以处理不正确的列表:

    1. last_tail([_|T]) -> last_tail(T);
    2. last_tail(Tail) -> Tail. %Will match any tail

    需要注意的是建立一个列表,或匹配反对它,你通常用做[Head|Tail]并不能检查,如果尾巴名单所以在处理不当的名单没有问题。很少需要不正确的列表,尽管您可以使用它们来做一些很酷的事情。

登录 后才能参与评论