2

为简单起见,Smallbasic 只有全局变量。它没有局部变量或参数。

尽管这使得教授或学习它变得更简单,但它也使一些事情变得复杂,比如递归函数。我很难在 smallbasic 中创建一个简单的递归函数,不得不使用手动堆栈。这可行,但它使它变得更加复杂,并且与简单的最初主要目标相矛盾!

这就是我可以编写阶乘的方式:

n = 5
ind = 1
fact()
TextWindow.WriteLine("fact(5)=" + f)

Sub fact
  If n = 1 Then
    f = 1
  Else
    ind = ind+1
    keepn[ind] = n
    n = n-1
    fact()
    f = f * keepn[ind]
    ind = ind-1
  EndIf
EndSub

注意:我刚刚写了它,它可能有错误。
你看图片。我正在手动创建一个堆栈并使用它来模拟局部变量并将其用于递归。

有没有一种简单的方法来创建这个递归函数?

4

2 回答 2

2

我认为您必须求助于全局变量才能在 SmallBasic 中编写递归函数。

我同意 SmallBasic 缺乏函数参数是非常有限的,并且通常使一种本应简单的编程语言在实践中使用起来相当复杂。

然而,SmallBasic 的库非常适合初学者,它比 WinForms 或 WPF 等企业框架更容易将内容放在屏幕上。库 SmallBasicLibrary.dll 可以轻松加载到其他 .Net 语言中,包括 VB.Net、C# 和 F#。只需创建一个控制台应用程序并添加对库的引用,然后对库命名空间使用 import/using/open。

在教我的孩子编程时,我从 SmallBasic 开始,他们喜欢 Turtle 功能,但随后很快切换到 F#,与 VB.Net 或 C# 相比,F# 具有一流的功能支持和更少的仪式感。public static void Main在打印“Hello World”之前必须向 7yo解释,这对我来说不是一个有吸引力的选择。

作为一个实验,我还创建了一个替代的SmallBasic 编译器实现,您可能会觉得它很有趣,因为它包括对函数参数元组和模式匹配的支持。

于 2014-08-18T17:33:51.233 回答
1

我认为值得注意的是,以这种方式创建递归函数——即只有全局变量,使用堆栈——本身就很有教育意义。这更接近装配的工作方式,因此从这个角度来看,必须以这种方式做事实际上可以被认为是一个特性......

于 2016-02-08T19:22:17.657 回答