You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang内置head、tail函数位置查询及相关使用疑问咨询

回答

你找不到名为head/1和tail/1的函数是正常的,Erlang标准库并未提供这两个命名的内置函数,对应功能的实现有两种惯用方案:

  • 方案1:优先使用模式匹配(官方推荐的最优写法)
    Erlang中列表解构最简洁高效的方式就是直接用模式匹配,不需要调用额外函数:
    取表头:[Head|_] = List
    取表尾:[_|Tail] = List
    用在函数头中可以进一步简化逻辑,示例:
    % 示例:递归求和函数,直接在函数头完成列表解构
    sum([]) -> 0;
    sum([H|T]) -> H + sum(T).
    
    这种方式性能优于任何函数调用,也是Erlang社区处理列表的通用惯例。
  • 方案2:使用内置缩写BIF hd/1 和 tl/1
    如果你确实需要通过函数调用的方式获取表头表尾,可以直接用Erlang默认导入的两个内置BIF,就是你要找的功能的缩写版本:
    • hd(List):返回列表的第一个元素,等价head/1功能
    • tl(List):返回列表去掉第一个元素后的剩余部分,等价tail/1功能
      实际调用示例:
    1> hd([1,2]).
    1
    2> tl([1,2]).
    [2]
    
    这两个函数是erlang模块的内置函数,默认已经导入,不需要加模块前缀即可直接调用,性能和模式匹配接近。

不建议用lists:nth/2和lists:nthtail/2实现该功能,这两个函数需要遍历列表到指定位置,相比模式匹配和hd/1、tl/1会产生不必要的性能开销,完全没有必要。

内容的提问来源于stack exchange,提问作者Jeffrey Benjamin Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:45:01