为什么这个递归打印功能在Erlang中不起作用

Low*_*ong 2 erlang recursion

嗨新手在这里,我想在Erlang中掌握递归函数.这个函数看起来应该可以工作,但我无法理解为什么它不能.我正在尝试创建一个函数,它将采取N和a string将打印出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).
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

** exception error: no function clause matching print_it(5, "hello')
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Dog*_*ert 5

Erlang中的变量以大写字母开头.string是一个原子,而不是一个名为"string"的变量.定义函数时print_it(N, string),可以使用第一个参数的任何值调用它,只使用atom string作为第二个参数.如果替换stringString:您的代码应该有效:

print_it(N, String) ->
     io:fwrite(String),
     print_it(N - 1, String).
Run Code Online (Sandbox Code Playgroud)