Functional programming 球拍方案嵌套定义

Functional programming 球拍方案嵌套定义,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我的目标是编写一种方法,通过给定imk_和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)

我的目标是编写一种方法,通过给定imk_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))

请详细说明,我不明白当调用
func
时,定义了
n1
iter
,但您从不调用它们中的任何一个。我调用n1!我知道,但是你从来没有调用过
iter
,你只是
define
它在
func
的主体中有一个隐式的
begin
。错误是“在一系列内部定义之后没有表达式”。您的(深入的)定义是
(定义(n1!)…)
(定义(iter i res)…)
——但之后您没有表达式。这是用户633183通过调用
iter
作为
(iter n0)
来修复的。您可以说“通过给定的x和n…”,但您只使用一个参数调用
(func 3)
。我不完全理解你在这里描述它的方式。你能展示一个x和y的例子和预期的结果吗?你的函数定义了两个局部函数,然后什么都不做。一些方案实现会返回
“BaNaNa”
,而另一些方案可能会试图告诉用户函数什么也不做。球拍能做到这一点。另外,这两个局部函数是死代码,因为它们从未使用过,因此也不需要定义。(
n1!
iter
调用,但由于从未使用过
iter
n1!
也从未使用过`)