我的目标是编写通过给定的 х 和 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)))))
我做错了什么?
最佳答案
您需要在两个定义之后添加一个表达式,以便 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))
关于functional-programming - Racket 方案嵌套定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568358/