gpt4 book ai didi

列表被长度函数设想为整数

转载 作者:行者123 更新时间:2023-12-01 09:47:56 26 4
gpt4 key购买 nike

我正在尝试使用 Karate Chop Kata 学习 Erlang .我将 kata 中提供的 runit 测试转换为 eunit 测试,并编写了一个小函数来执行手头的任务。

-module(chop).
-export([chop/2]).
-import(lists).
-include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
chop_test_() -> [
?_assertMatch(-1, chop(3, [])),
?_assertMatch(-1, chop(3, [1])),
?_assertMatch(0, chop(1, [1])),
....several asserts deleted for brevity...
].
-endif.

chop(N,L) -> chop(N,L,0);
chop(_,[]) -> -1.
chop(_, [],_) -> -1;
chop(N, L, M) ->
MidIndex = length(L) div 2,
MidPoint = lists:nth(MidIndex,L),
{Left,Right} = lists:split(MidIndex,L),
case MidPoint of
_ when MidPoint < N -> chop(N,Right,M+MidIndex);
_ when MidPoint =:= N -> M+MidIndex;
_ when MidPoint > N -> chop(N,Left,M)
end.

编译正常。但是运行测试给出了(除其他外)以下失败:

::error:badarg
in function erlang:length/1
called as length(1)
in call from chop:chop/3

我已经尝试了声明 chop(N,[L],M) .... 和使用 length([L]) 的不同排列,但未能解决此问题。欢迎提出任何建议。

附言。正如您可能已经猜到的那样,我对 Erlang 很感兴趣。

最佳答案

所以我现在时间紧迫,但我看到的第一个问题是

chop(N,L) -> chop(N,L,0);
chop(_,[]) -> -1.

是错误的,因为 chop(N,L) 总是匹配的。颠倒这些条款,看看你能得到什么。

除此之外,在 1 个元素列表的情况下,nth(0, [1]) 将失败。我觉得这些列表可能是 1 索引的。

关于列表被长度函数设想为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1035655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com