注册
登录
lisp
函数式编程:什么是“不当列表”?
返回
函数式编程:什么是“不当列表”?
作者:
狗头军师
发布时间:
2024-07-25 11:26:01 (14天前)
有人可以解释什么是“不当列表”吗?
收藏
举报
2 条回复
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用于适当的列表: ``` len([_|T]) -> 1 + len(T); len([]) -> 0. ``` 我们明确匹配终止的位置[]。如果给出的列表不正确,将产生错误。虽然last_tail返回列表最后尾的函数也可以处理不正确的列表: ``` last_tail([_|T]) -> last_tail(T); last_tail(Tail) -> Tail. %Will match any tail ``` 需要注意的是建立一个列表,或匹配反对它,你通常用做[Head|Tail]并不能检查,如果尾巴名单所以在处理不当的名单没有问题。很少需要不正确的列表,尽管您可以使用它们来做一些很酷的事情。
编辑
登录
后才能参与评论