为什么这个递归打印功能在Erlang中不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个递归打印功能在Erlang中不起作用相关的知识,希望对你有一定的参考价值。
嗨新手在这里,我想在Erlang中掌握递归函数。这个函数看起来应该可以工作,但我无法理解为什么它不能。我正在尝试创建一个将需要N
和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).
我得到的错误是:
** 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).
以上是关于为什么这个递归打印功能在Erlang中不起作用的主要内容,如果未能解决你的问题,请参考以下文章