Functional programming 球拍方案嵌套定义
我的目标是编写一种方法,通过给定imk_和n计算总和: S=1+x/1!+x2/2!+…+xn/n 我的代码: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)
#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!
也从未使用过`)