[英]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.