functional-programming - Racket 方案嵌套定义

标签 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)))))

我做错了什么?

最佳答案

您需要在两个定义之后添加一个表达式,以便 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/

相关文章:

module - 我什么时候应该在 Racket 中使用 `protect-out`?

java - 使用函数式编程在java中关闭文件

haskell - 如何使用 Y-Combinator;为什么这个无限递归返回 9?

python - 如何在 Sage Math 中使用 Scheme 而不是 Python

sorting - 按多个键对 Racket 中的结构列表进行排序

scheme - 恢复旧的 PLT-Scheme 项目(1999 年之前)

audio - 使用 rsound 播放正弦波信号

java - 迭代嵌入式循环的最佳方法是什么?迭代或函数式?

algorithm - Haskell中的简单链表循环检测

scheme - 将列表的元素配对在一起