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

Erlang获取第n个元素问题:如何在非目标位置删除列表头部

修正Erlang获取列表第N个元素的代码

原代码的问题出在递归调用时没有移除列表的头部元素,导致每次递归都在同一个列表上操作,最终无论N取何值(只要N≥1)都会返回列表的第一个元素。

修正后的代码

-module(lab02).
-export([functionGetnth/2]).

functionGetnth([], _N) ->
    {error, no_such_element};
functionGetnth([H|_T], 1) -> 
    H;
functionGetnth([_H|T], N) when N > 1 ->
    functionGetnth(T, N-1).

关键修正说明

第三个函数子句中,我们将递归调用的参数从[H|T]改为T——也就是去掉当前列表头部元素后的剩余列表,同时将N减1。这样每一次递归都会:

  • 丢弃列表的当前头部元素(向目标位置靠近一步)
  • 把目标位置序号减1

当N最终减到1时,返回当前列表的头部元素,也就是原列表的第N个元素。

示例验证

调用functionGetnth([a, b, c, d], 3)时:

  1. 第一次递归:传入列表[b, c, d],N=2
  2. 第二次递归:传入列表[c, d],N=1
  3. 触发第二个子句,返回c,符合预期

内容的提问来源于stack exchange,提问作者Andy891357

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:45:37