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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个递归打印功能在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).

以上是关于为什么这个递归打印功能在Erlang中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GlutPostRedisplay 和 sleep 功能在此代码中不起作用?

指针分配在递归函数中不起作用

erlang的递归不起作用。获取函数子句匹配错误

打印描述在 Xcode 6 中不起作用

为啥这个 PHP 递归函数不起作用

为啥切换屏幕在 kivy 中不起作用?