recursion - 为什么这个递归打印函数在 Erlang 中不起作用

标签 recursion erlang

嗨,新手,我正在尝试掌握 Erlang 中的递归函数。这个函数看起来应该可以工作,但我不明白为什么它不能。我正在尝试创建一个函数,该函数将采用 Nstring 并将该字符串打印到 stdout 多次。

我的代码:

-module(print_out_n_times).
-export([print_it/2).

print_it(0, _) ->
     "";

print_it(N, string) ->
     io:fwrite(string),
     print_it(N - 1, string).

我得到的错误是:

** exception error: no function clause matching print_it(5, "hello')

我怎样才能做到这一点?

最佳答案

Erlang 中的变量以大写字母开头。 string 是一个原子,而不是名为“string”的变量。当您定义函数 print_it(N, string) 时,可以使用第一个参数的任何值来调用它,并且只能使用原子 string 作为第二个参数。如果将 string 替换为 String,您的代码应该可以工作:

print_it(N, String) ->
     io:fwrite(String),
     print_it(N - 1, String).

关于recursion - 为什么这个递归打印函数在 Erlang 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49033235/

相关文章:

Javascript:递归计算数组中所有元素的总和?

erlang - 为什么要这样设计?

erlang - 在erlang中向远程节点端口发送消息

c - Erlang 端口示例

erlang - Erlang 堆栈跟踪中包含多少条目?

php - 加入 Propel 导致递归警告

bash - 仅一种文件类型的递归ctags

javascript - Javascript 中的递归函数返回未定义

erlang - 为什么 simple_one_for_one 工作人员可以共享相同的子规范 ID?

c# - 计算有两个相同儿子的节点