Схема ракетки вложенная определить - PullRequest
2 голосов
/ 12 июня 2019

Моя цель - написать метод, который по заданным х и n вычисляет сумму:

S = 1 + x / 1!+ х2 / 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 Ответ

4 голосов
/ 12 июня 2019

Вам нужно добавить выражение после двух определений, чтобы 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))
...