【发布时间】: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两次?
-
据我所知,当需要两个参数时,您可以分别调用
fstx和sndx一个参数。也许解析器因此而发牢骚?
标签: list algorithm functional-programming elixir