【问题标题】:Elixir language: syntax error when trying to unzip a list. What is missing?Elixir 语言:尝试解压缩列表时出现语法错误。缺什么?
【发布时间】:2021-04-02 05:23:11
【问题描述】:

任何可以提供帮助的人。

我是 Elixir 语言的初学者。我正在尝试执行“unzip”操作,“iex”环境在脚本的“53”位置显示语法错误“syntax error before: ')'”,我正在编写。我知道该算法有效,因为我在 Haskell 上对其进行了测试,但我找不到我的语法错误在哪里以及如何解决它。

这个

defmodule Alf do
  def lastx([]), do: raise ArgumentError, message: "empty list"
  def lastx([x]), do: x
  def lastx([x | xs]), do: lastx(xs)

  def initx([]), do: raise ArgumentError, message: "empty list"
  def initx([x]), do: []
  def initx([x | xs]), do: [x | initx(xs)]

  def revx([]), do: []
  def revx(xs), do: [lastx(xs) | revx(initx(xs))]

  def zipx([], b), do: []
  def zipx(a, []), do: []
  def zipx([x | a], [y | b]), do: [{x, y} | zipx(a, b)]

  def fstx(x, _), do: x

  def sndx(_, y), do: y
end

这是不能正常工作的部分:

defmodule Alf do
  def unzipx_bs(xs, ys, []), do: (revx(xs), revx(ys))
  def unzipx_bs(xs, ys, [z | zs]), do: unzipx_bs([fstx z | xs], [sndx z | ys], zs)
end

unzipx_bs”脚本稍后将设置为私有,并将有一个名为“unzipx”的脚本作为访问接口,将执行所谓的“unzipx_bs [], [], [{1, 4}, {2, 5}, {3 , 6}]”以生成类似于“@987654329”的结果@”。

【问题讨论】:

  • 你怎么定义模块Alf两次?
  • 据我所知,当需要两个参数时,您可以分别调用 fstxsndx 一个参数。也许解析器因此而发牢骚?

标签: list algorithm functional-programming elixir


【解决方案1】:

我假设您希望您的 unzipx_bs 函数返回一对。元组在elixir中是用{}写的,所以应该是{revx(xs), revx(ys)}。我会进一步建议你在参数列表中解压你的z,给出:

def unzipx_bs(xs, ys, []), do: {revx(xs), revx(ys)}
def unzipx_bs(xs, ys, [{x, y} | zs]), do: unzipx_bs([x | xs], [y | ys], zs)

然后:

Alf.unzipx_bs([], [], [{1, 2}, {3, 4}, {5, 6}])
# => {[1, 3, 5], [2, 4, 6]}

【讨论】:

  • 非常感谢您的关注、指导、提示和投入的时间。愿天父祝福你。
猜你喜欢
  • 1970-01-01
  • 2012-03-21
  • 2016-11-25
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
相关资源
最近更新 更多