如何在Scheme函数中声明变量?

Cha*_*han 8 scheme

有可能这样做吗?假设我想获取列表的最后一个元素,我将创建一个变量i = 0,并将其递增直到它等于长度.任何的想法?一个例子将不胜感激.

谢谢,

Fre*_*Foo 12

有几种方法可以声明变量; 最干净的是let:

(let ((x some-expr))
  ; code block that uses x
Run Code Online (Sandbox Code Playgroud)

但是你不需要这个来获取列表的最后一个元素.只需使用递归:

(define (last xs)
  (if (null? (cdr xs))
    (car xs)
    (last (cdr xs))))
Run Code Online (Sandbox Code Playgroud)

注意:如果需要,可以使用变量来缓存cdr结果:

(define (last xs)
  (let ((tail (cdr xs)))
    (if (null? tail)
      (car xs)
      (last tail))))
Run Code Online (Sandbox Code Playgroud)