簡體   English   中英

球拍:使用列表中的元素繪制拋物線

[英]Racket: Graphing a parabola with elements from a list

我創建了以下表達式,我想根據列表中的最后兩個元素繪制拋物線圖。 它看起來像這樣:

#lang racket
(require plot)

(define list-sqr-graph
  (lambda (lst)
    (cond
      [(null? lst) (plot (function sqr 0 0))]
      [(<= (car lst) 0) (list-sqr-graph (cdr lst))]
      [(not (equal? (length lst) 2)) (list-sqr-graph (cdr lst))]
      [else (plot (function sqr (car lst) (cdr lst)))])))

第一個條件語句檢查列表是否為空,如果為true則返回空白圖。 第二個條件語句從列表中跳過小於或等於0的過去的數字。第三個條件語句檢查列表的長度是否等於2,並在列表中向下,直到長度等於2.否則語句是我在運行表達式時遇到麻煩的地方,例如:

(list-sqr-graph '(1 2 3))

這會導致錯誤讀取:

function: contract violation
expected: (or/c rational? #f)
given: '(4)

從這個錯誤中我開始相信列表的第一個元素被讀作數字,但第二個元素有問題。 為什么是這樣?

先感謝您!

你正在plot時傳遞一個列表。 記住cdr返回一個列表而不是一個元素(就像car一樣)。

你想用cadr

#lang racket
(require plot)

(define list-sqr-graph
  (lambda (lst)
    (cond
      [(null? lst) (plot (function sqr 0 0))]
      [(<= (car lst) 0) (list-sqr-graph (cdr lst))]
      [(not (equal? (length lst) 2)) (list-sqr-graph (cdr lst))]
      [else (plot (function sqr (car lst) (cadr lst)))]))) <- HERE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM