球拍方案嵌套定义

时间:2019-06-12 18:29:29

标签: functional-programming scheme racket

我的目标是编写一种方法,该方法通过给定х n 来计算总和:

S = 1 + x / 1! + x2 / 2! + ... + xn / n!

我的代码:

#lang racket
(define (func n)
  (define (n1! f)
    (if (= f 0) 1
        (* f (n1! (- f 1)))))
  (define (iter i res)
    (if (= i n) (+ 1 res)
       (iter (+ i 1) (/ i (n1! i))))))
(func 3)

有我不明白的错误。它说:

begin (possibly implicit): no expression after a sequence of internal definitions in:
  (begin (define (n1! f) (if (= f 0) 1 (* f (n1! (- f 1))))) (define (iter i res) (if (= i n) (+ 1 res) (iter (+ i 1) (/ i (n1! i))))))
  (define (n1! f) (if (= f 0) 1 (* f (n1! (- f 1)))))
  (define (iter i res) (if (= i n) (+ 1 res) (iter (+ i 1) (/ i (n1! i)))))

我做错了什么?

1 个答案:

答案 0 :(得分:4)

您需要在两个定义之后添加一个表达式,以便func实际上可以执行某些操作。当前,您的代码等效于(define (func n))

您的代码是这个

(define (func n)
  (define (n1! f)
    (if (= f 0) 1
        (* f (n1! (- f 1)))))
  (define (iter i res)
    (if (= i n) (+ 1 res)
       (iter (+ i 1) (/ i (n1! i))))))

您需要这样做

(define (func n)
  (define (n1! f)
    (if (= f 0) 1
        (* f (n1! (- f 1)))))
  (define (iter i res)
    (if (= i n) (+ 1 res)
       (iter (+ i 1) (/ i (n1! i)))))
  (iter n 0))