如何将 #<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 更容易,这就是为什么您的代码甚至被接受执行的原因。
您应该使用嵌套的 if
或 cond
形式:
(if a 1
(if b 2
(if c 3)))
(cond (a 1)
(b 2)
(c 3))
我正试图掌握 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 更容易,这就是为什么您的代码甚至被接受执行的原因。
您应该使用嵌套的 if
或 cond
形式:
(if a 1
(if b 2
(if c 3)))
(cond (a 1)
(b 2)
(c 3))