gpt4 book ai didi

functional-programming - Erlang:优雅的 tuple_to_list/1

转载 作者:行者123 更新时间:2023-12-04 00:06:00 25 4
gpt4 key购买 nike

我正在通过 Armstrong 的“编程 Erlang”向我介绍 Erlang。一个练习是编写 tuple_to_list/1 BIF 的重新实现。我的解决方案对我来说似乎相当不雅,特别是因为我使用了辅助函数。有没有更多的 Erlang 风格的方法来做到这一点?

tup2lis({}) -> [];
tup2lis(T) -> tup2list_help(T,1,tuple_size(T)).

tup2list_help(T,Size,Size) -> [element(Size,T)];
tup2list_help(T,Pos,Size) -> [element(Pos,T)|tup2list_help(T,Pos+1,Size)].

非常感谢您的想法。 :)

最佳答案

我认为你的功能还可以,如果你的目标是学习语言,那就更好了。
就风格而言,构造列表时的基本情况通常只是空列表 []。
所以我会写

tup2list(Tuple) -> tup2list(Tuple, 1, tuple_size(Tuple)).

tup2list(Tuple, Pos, Size) when Pos =< Size ->
[element(Pos,Tuple) | tup2list(Tuple, Pos+1, Size)];
tup2list(_Tuple,_Pos,_Size) -> [].

你可以用列表理解来写几乎相同的东西
[element(I,Tuple) || I <- lists:seq(1,tuple_size(Tuple))].

当元组没有元素时,它将按预期工作,因为lists:seq(1,0) 给出了一个空列表。

关于functional-programming - Erlang:优雅的 tuple_to_list/1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220993/

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