前向声明

每个变量、过程等,需要使用前向声明。前向声明不能互相递归:

  1. # 前向声明:
  2. proc even(n: int): bool
  1. proc odd(n: int): bool =
  2. assert(n >= 0) # 确保我们没有遇到负递归
  3. if n == 0: false
  4. else:
  5. n == 1 or even(n-1)
  6.  
  7. proc even(n: int): bool =
  8. assert(n >= 0) # 确保我们没有遇到负递归
  9. if n == 1: false
  10. else:
  11. n == 0 or odd(n-1)

这里 odd 取决于 even 反之亦然。因此 even 需要在完全定义前引入到编译器。前向声明的语法很简单:直接忽略 = 和过程体。 assert 只添加边界条件,将在 模块 段中讲到。

语言的后续版本将弱化前向声明的要求。

示例也展示了一个过程体可以由一个表达式构成,其值之后被隐式返回。