Elixir 语言:尝试解压缩列表时出现语法错误。什么东西少了?
Elixir language: syntax error when trying to unzip a list. What is missing?
任何可以提供帮助的人。
我是 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}]
”以生成一个结果类似于“[1, 2, 3], [4, 5, 6]
”。
我假设您希望 unzipx_bs
函数与 return 一对。元组在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]}
任何可以提供帮助的人。
我是 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}]
”以生成一个结果类似于“[1, 2, 3], [4, 5, 6]
”。
我假设您希望 unzipx_bs
函数与 return 一对。元组在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]}