Любой, кто может помочь.
Я новичок в Elixir Language. Я пытаюсь выполнить операцию «unzip
», а среда «iex
» показывает синтаксическую ошибку «syntax error before: ')'
» в позиции «53
» скрипта, я пишу. Я знаю, что алгоритм работает, потому что тестировал его на 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]
».
Насколько я вижу, вы вызываете fstx
и sndx
каждый с одним аргументом, когда ожидаются два аргумента. Может парсер из-за этого хрипит?
Я предполагаю, что вы хотели, чтобы ваша функция unzipx_bs
возвращала пару. Кортежи пишутся с помощью {}
в эликсире, поэтому должно быть {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]}
Большое спасибо за ваше внимание, руководство, подсказку и уделенное время. Да благословит вас Небесный Отец.
Почему вы определяете модуль Alf дважды?