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

Racket [v8.6 Beginning Student]函数简化求助:q3a/q3b/q3c优化

Racket函数简化优化方案

核心依据梳理

先明确给定约束:

  1. q3b、q3c仅输出up/down,所有输出left/right的分支均为不可达分支,可直接删除
  2. 已确认的等价输出规则:
    • (q3a #t #f) = (q3b #t #f) → q3b该分支输出up
    • (q3b #t #t) = (q3c #t #t) → q3b该分支输出up(q3c此处输出up)
    • (q3a #f #t) = (q3b #f #t) → q3b该分支输出down

逐个函数简化

1. q3c 简化

原嵌套cond可直接转换为逻辑表达式,适配Beginning Student环境:

; 原代码
(define (q3c p1? p2?)
  (cond [(cond [p1? p2?]
               [else true])
         'up]
    [else 'down]))

; 简化后(扁平结构+清晰逻辑)
(define (q3c p1? p2?)
  (cond [(or (not p1?) p2?) 'up]  ; 等价于原嵌套cond的判断逻辑
        [else 'down]))

逻辑说明:当p1?为假,或p1?为真且p2?为真时输出up,否则输出down。

2. q3b 简化

基于约束剔除无效分支并推导逻辑:

  • (and p1? false)永远为假,直接删除该分支
  • 所有输出left/right的分支均不可达,直接删除
  • 结合等价规则推导:p1?为真时无论p2?取值,均输出up;p1?为假时无论p2?取值,均输出down

简化后代码:

; 原代码(冗余分支较多)
(define (q3b p1? p2?)
  (cond [p1? (cond
              [p2? (cond
                     [p1? 'up]
                     [p2? 'down]
                     [else 'right])]
              [else (cond
                      [p2? 'down]
                      [else 'up])])]
       [(and p1? false) (cond
                          [p2? 'left]
                          [else 'right])]
       [else 'down]))

; 简化后
(define (q3b p1? p2?)
  (if p1? 'up 'down))

验证:完全符合所有给定等价输出条件,且仅输出up/down。

3. q3a 简化

q3a原逻辑包含left/right输出,若仅优化结构(不修改输出),可将嵌套cond展开为扁平结构提升可读性:

; 原代码
(define (q3a p1? p2?)
  (cond
    [p2? (cond [p1? 'left]
                [else 'down])]
    [else (cond [p1? 'up]
                [else 'right])]))

; 简化后(扁平cond结构)
(define (q3a p1? p2?)
  (cond
    [(and p2? p1?) 'left]
    [(and p2? (not p1?)) 'down]
    [(and (not p2?) p1?) 'up]
    [else 'right]))

若需让q3a也仅输出up/down,需补充(q3a #t #t)和(q3a #f #f)的输出规则(当前给定条件未覆盖这两个场景)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:50:57