我有两个函数返回相同大小的结果列表,我试图检查结果是否相同.列表中的顺序可以不同.我目前正在使用以下功能:
lists_are_the_same(List1, List2) ->
List1 -- List2 =:= [].
Run Code Online (Sandbox Code Playgroud)
此函数从另一个列表中减去一个列表,并检查结果是否为空列表.问题是,这种方法非常慢,在我的情况下,列表可能相当大.
有没有更快的方法来检查两个列表是否由完全相同的元素组成?
使用erlang进行开发时,我有时会使用这样的case语句
case Status of
1 ->
Variable = "Something";
2 ->
Variable = "Something else";
3 ->
Variable = {"Something very different", [1,2,3]}
end
Run Code Online (Sandbox Code Playgroud)
根据某些条件为变量赋值.
问题是:如果我在case语句之后使用它:
do_something(Variable),
Run Code Online (Sandbox Code Playgroud)
我收到了编译警告:
Warning: variable 'Variable' exported from 'case'
Run Code Online (Sandbox Code Playgroud)
Erlang根据某些条件为变量赋值并避免此类警告的最佳做法是什么?
定义一个类型,它将是一个字符串列表,但也可以是一个空列表,我是否必须定义这两种情况:
-type my_type() :: [string()] | [].
Run Code Online (Sandbox Code Playgroud)
或者这就够了:
-type my_type() :: [string()].
Run Code Online (Sandbox Code Playgroud) 我最近尝试构建一个项目,该项目具有声明为Github链接的各种依赖项.链接是公共Github存储库和我公司的私有Github Enterprise存储库的链接的混合.
一些链接是格式化的
https://github.com/project/repo.git
Run Code Online (Sandbox Code Playgroud)
还有一些是格式化的
git@github.com:project/repo.git
Run Code Online (Sandbox Code Playgroud)
这些格式之间究竟有什么区别?哪种格式用于什么目的?
我正在尝试实现一个功能
llen(ListOfLists)
Run Code Online (Sandbox Code Playgroud)
它返回一个列表,其中包含ListOfLists中列表的长度.函数应该使用列表:map/2.
例:
1> funs:llen([[1, 2, 3], [], [4, 5]]).
[3, 0, 2]
Run Code Online (Sandbox Code Playgroud)
我知道如何计算一个列表的长度:
list([]) -> 0;
list([_|T]) -> 1+list(T).
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用乐趣和列表为多个列表执行此操作.
我在erlang中编写一个函数,它应该能够接受不同顺序和不同格式的各种参数集,并且我使用非常严格的防护来确保正确匹配.
我这样写一个长护士并不罕见:
my_fun(List, Number, OptionalList, Record)
when is_list(List) andalso length(List) >= 5,
is_integer(Number) andalso Number >= 10 andalso Number =< 50 orelse Number =:= undefined,
is_list(OptionalList) orelse OptionalList =:= undefined,
is_record(Record, my_record) ->
Run Code Online (Sandbox Code Playgroud)
我在这里使用的是orelse,而且它使得代码的可读性差得多,而且通常更长.
有没有办法实现相同的保护逻辑使用,和; 只要?
我正在尝试编写一个函数来调用具有指定名称和arity的函数:
my_fun(FunctionName, Arity) ->
%Call FunctionName/Arity
.
Run Code Online (Sandbox Code Playgroud)
所以这样调用它:
my_fun(foo, 3)
Run Code Online (Sandbox Code Playgroud)
应该导致调用函数foo/3.
问题是,如果只指定了其名称和arity,我不知道如何调用函数.我试图调用的函数保证存在于我试图调用它的同一模块中.
是否可以在Erlang中实现这一点,以及如何实现?