【问题标题】:[ERLANG]: Why answer returns list in a list rather than list?[ERLANG]:为什么答案返回列表而不是列表?
【发布时间】:2014-10-27 10:44:02
【问题描述】:

给定模块

-module(p1). 

-export([f2/2]). 

f2([A, A | B]) -> {A, B}; 
f2([A, B | _]) -> {A, B}; 
f2([A]) -> A; 
f2(_) -> no_match. 

我被要求尝试输入值

 p1:f2([1,1,[1,1]]). 

我的回答是这个输入值与 f2 的第一个函数子句匹配,因此给了我们结果:

{1,[1,1]}

但是根据给定的答题卡,答案是

{1,[[1,1]]}

我无法完全理解为什么我们会在列表中获得列表,而不是在答案中获得列表。非常感谢您对此的解释,谢谢。

【问题讨论】:

  • 顺便说一句,您的代码不可编译。
  • 您正在导出f2/2 并实施f2/1

标签: list erlang tuples


【解决方案1】:

你应该看看头尾在 Erlang 中是如何工作的。尾巴总是一个列表;可以是单元素列表,也可以是空列表,但始终是列表。

让我们看看 shell 中的例子:

2> Fun = fun([H | T]) -> {H, T} end. 
#Fun<erl_eval.6.90072148>
3> Fun([a]).
{a,[]}
4> Fun([a,b]).
{a,[b]}
5> Fun([a,[a,b]]).
{a,[[a,b]]}
6> Fun([a,b,c]).  
{a,[b,c]}
7> Fun([a,b,c,d]).
{a,[b,c,d]}

所以在你的情况下,你返回的是A,它被重复1B,它是所有剩余元素的列表。在我们的例子中,只剩下一个元素,所以我们返回一个元素列表。而且这个元素是一个二元素列表,因此列表中的列表[[1, 1]]

【讨论】:

  • 谢谢,现在一切都说得通了!
  • 如果确实如此,您可以将问题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 2014-11-15
  • 2011-11-10
  • 1970-01-01
  • 2019-12-20
  • 2019-11-23
相关资源
最近更新 更多