繁体   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