Recursion 如何模拟Ruby';什么是长生不老药?

Recursion 如何模拟Ruby';什么是长生不老药?,recursion,elixir,Recursion,Elixir,我正在将一个Ruby项目转换为Elixir。Ruby的循环如何转化为长生不老药 直到scanner.eos?做 代币它可能类似于 def tokens(scanner) do tokens(scanner, []) end defp tokens(scanner, acc) do if StringScanner.eos?(scanner) do acc else tokens(scanner, add_to_acc(scan_stuff(), acc)) en

我正在将一个Ruby项目转换为Elixir。Ruby的循环如何转化为长生不老药

直到scanner.eos?做

代币它可能类似于

def tokens(scanner) do
  tokens(scanner, [])
end

defp tokens(scanner, acc) do
  if StringScanner.eos?(scanner) do
    acc
  else
    tokens(scanner, add_to_acc(scan_stuff(), acc))
  end
end

至少这可能是一般的想法。正如您将看到的,我保留了两个非常通用的函数(
scan_stuff/0
add_to_acc/2
),因为我不知道您打算如何实现这些函数;第一个是用来做
scan(line+1)
在Ruby代码中所做的事情,而第二个是用来做
我认为你问错了问题。请解释你的最终目标是什么,建议一个好的解决方案可能更容易。现在的问题对我来说意义不大。我有一个标记器,它将文本文件拆分为单独的行,然后循环每行,并给StringScanner一行,它循环行匹配模式。就像Ruby版本一样,字符串扫描程序在每次匹配扫描时都会移动一个指针。eos?如果已到达字符串的结尾,则返回true。在Ruby中,我使用了
直到
循环。
如何将_添加到_acc
工作?在我的例子中,tokens是一个元组列表。例如,令牌可以如下所示:
{:new_行,“\n”、{1,1}}
。typespec:
@type标记::{:atom,any,{integer,integer}}
。我想我不明白它是如何用一个空列表初始化的
[]
,然后在没有声明变量的情况下以列表中的内容结束的。没关系。我发现你的回答很好。我想我现在更明白了。我只需要弄清楚如何将其应用到我的代码中……。@EdwardJ.Stembler请我使用#elixir lang IRC(whatyouide),如果您需要进一步的帮助:)