You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Racket技术问题:将剩余参数映射至plot过程

解决Racket中plot可变参数映射的问题

我明白你现在卡在怎么把可变参数列表里的每个函数都转换成(function f)形式并加入到绘图输入列表里了,咱们来一步步解决这个问题:

首先,你需要处理两个核心问题:一是正确遍历可变参数fns生成对应的绘图元素,二是修正网格选项的错误处理(原来的写法会在关闭网格时插入空列表元素,导致plot出错)。

下面是修改后的完整代码:

(define (graph fn/1 #:grid? [grid? true] #:min [min -20] #:max [max 20] . fns)
  (define plot-input
    (append
     (list (axes))
     (if grid? (list (tick-grid)) '())
     (list (function identity #:style 'dot #:width 1.5 #:color 'gray)
           (function fn/1))
     (map (lambda (f) (function f)) fns)))
  (plot plot-input
        #:x-min min #:x-max max
        #:y-min min #:y-max max))

关键修改点说明:

  • 处理可变参数fns:用map函数遍历fns中的每个函数,通过(lambda (f) (function f))把每个函数转换成plot能识别的绘图元素,再用append把这些元素合并到主列表中,这就是你之前缺失的核心逻辑。
  • 修正网格选项:原来的代码在关闭网格时会插入empty作为列表元素,这会导致plot函数报错。现在改成当grid?为false时,传入空列表'(),append会自动忽略空列表,保证最终的plot-input是一个扁平的有效绘图元素列表。
  • 补全y轴范围参数:把你代码中省略的#:y-max补全为传入的max值,和x轴范围保持一致,当然你也可以根据需求改成其他值。

调用示例:

你可以这样测试这个函数,同时绘制多个函数:

(graph sin #:grid? #t #:min -10 #:max 10 cos tan)

这个调用会绘制sin函数(作为主函数),同时叠加cos、tan函数,还有灰色的identity点线和网格。

内容的提问来源于stack exchange,提问作者Meow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:59:46