如何将 #<unspecified> 变成 guile scheme 中的数字

How do I turn #<unspecified> into a number in guile scheme

我正试图掌握 scheme 中递归的窍门。我组合了一个 Fibinachi 函数,它保持 returning 未指定而不是数字。如何使此函数 return 成为一个数字且未指定?

(define (F n)
  (if (= n  0)
      0)
  (if (= n 1)
      1)
  (if (< n 2)
      (+
       (F (- n 1))
       (F (- n 2)))))

(display (F 5))
(newline)

函数returns

#<unspecified>

我正在使用 guile (GNU Guile) 2.0.13。

这里的问题是您的代码是:

(begin
  (if a 1)
  (if b 2) 
  (if c 3))

这有什么问题?除非 c 为真,否则该值将是未指定的。

为什么?当条件为假时,每个 if 的值是未指定的。 begin returns 最后一个表达式的值。

您可能会问,因为它没有出现在我的代码中,所以开头是从哪里来的?为了使每个 lambda 和 define 都包含一个隐式 begin 更容易,这就是为什么您的代码甚至被接受执行的原因。

您应该使用嵌套的 ifcond 形式:

(if a 1 
    (if b 2 
        (if c 3)))

(cond (a 1) 
      (b 2) 
      (c 3))