gpt4 book ai didi

elixir - Elixir 新手 - 连接两个列表

转载 作者:行者123 更新时间:2023-12-01 15:17:18 25 4
gpt4 key购买 nike

我是 Elixir 的新手,我正在尝试创建一个简单的匿名函数来连接两个原子列表。

正确的,编写的代码是:

concat = fn(x,y) -> x ++ y end

此代码也适用于其他数据类型。

我的问题是,为什么下面的代码不起作用?
list_concat = fn([:a,:b],[:c,:d]) -> [:a,:b,:c,:d] end

当我在函数中写入时,Iex 不会抛出,但是如果我尝试运行 list_concat ,抛出以下内容:
> list_concat.([:true,:false],[:false,:true])
** (FunctionClauseError) no function clause matching in :erl_eval."-inside
an-interpreted-fun-"/2

The following arguments were given to :erl_eval."-inside-an-interpreted-fun-
"/2:

# 1
[true, false]

# 2
[false, true]

谁能帮我弄清楚堆栈跟踪的含义,以及为什么 list_concat不是正确的解决方案吗?它与模式匹配有关吗?谢谢!

最佳答案

一个原子只匹配它自己。您只能调用您的list_concat功能与 [:a,:b][:c,:d]作为论据。如果要将变量绑定(bind)到用户传递的任何值,只需删除 : :

iex(1)> list_concat = fn [a, b], [c, d] -> [a, b, c, d] end
#Function<12.99386804/2 in :erl_eval.expr/5>
iex(2)> list_concat.([:true, :false], [:false, :true])
[true, false, false, true]

PS:不用放 :在 bool 值之前。 :truetrue 相同.

关于elixir - Elixir 新手 - 连接两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49498232/

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