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