Сюжет DrRacket «не смог определить разумные границы сюжета» - PullRequest
3 голосов
/ 06 августа 2020

Я пытаюсь построить эту функцию:

#lang racket

(define (smoothsquare x)
  ((smooth square) x))

(define (square x)
  (* x x))

(require plot)
(plot (function smoothsquare (- 1) 1))

(define dx 0.00001)

(define (smooth f)
  (lambda (x) (/ (+ (f (- x dx))
                    (f x)
                    (f (+ x dx)))
                 3)))

, но получаю следующую ошибку: «. Plot: не удалось определить разумные границы графика; получено x ∈ [-1,1], y ∈ [# f, # f] "

Почему? Есть ли способ обойти это? Я могу придумать разумный график, привязанный к оси Y, а именно [-1,1], но я не уверен, как это сказать.

Я прочитал здесь вступление https://docs.racket-lang.org/plot/intro.html но мне это не помогает

1 Ответ

3 голосов
/ 06 августа 2020

Проблема в том, что вы определили smooth слишком поздно. То есть, когда вы вызываете plot, библиотека графиков пытается вызвать ваш smoothsquare, который, в свою очередь, пытается вызвать smooth, но smooth еще не определен, потому что он определен только после вызова plot готово.

Следующий код должен работать:

#lang racket

(require plot)

(define dx 0.00001)

(define (smooth f)
  (lambda (x)
    (/ (+ (f (- x dx))
          (f x)
          (f (+ x dx)))
       3)))

(define (smoothsquare x)
  ((smooth square) x))

(define (square x)
  (* x x))

(plot (function smoothsquare -1 1))
...