【问题标题】:In DrRacket how do i alter my program that uses if statements to rather use a conditional statement在 DrRacket 中,我如何更改使用 if 语句的程序以使用条件语句
【发布时间】:2019-11-01 15:47:07
【问题描述】:

这是我要解决的问题

写一个函数(last-substring-len s n)

它消耗一个 Str 和一个 Nat,并返回 s 的子字符串 按字母顺序排在最后的长度 n。

记得考虑你的函数是否需要它的任何东西 论据!

例如:

(last-substring-len "foobar" 4) => "ooba"

(last-substring-len "thequickbrownfoxjumpsoverthelazydogs" 7) => "xjumpso"

实际上我几乎解决了我的问题,但我希望能够更改我的代码,以便函数 get-maximium 的 if 语句替换为 cond 语句。

这是我的原始代码:

(define (substrings-w-len s n)
  (cond
  [(> n (string-length s)) '()]
   [ else (cons (substring s 0 n)
            (substrings-w-len (substring s 1 (string-length s)) n))]))


(define (get-maximium string-list)
  (if(null? string-list) '()
  (if(= 1( length string-list)) string-list
  (if (equal? #true (string>=? (first string-list) (first (rest string-list))))
                  (get-maximium (cons (first string-list) (rest (rest string-list))))
                  (get-maximium (rest string-list))))))

(define (last-substring-w-len s n)
  ( get-maximium (substrings-w-len s n)))

(check-expect (last-substring-w-len "foobar" 4) "ooba")

这会产生(list "ooba"),而它应该只产生“ooba”,所以我需要将列表转换为我应该能够自己解决的字符串,但如果有人能帮助我解决这个问题,我将不胜感激。

现在的主要问题是我想用条件语句替换 get-maximum 中的 if 语句

这是我更改 get-maximium 函数以尝试用 cond 语句替换 if 函数,但它还不起作用。

(define (get-maximium string-list)
  (cond
  [(null? string-list) '()]
  [(= 1( length string-list)) string-list]
  [ else (equal? #true (string>=? (first string-list) (first (rest string list))))
                  (get-maximium (cons (first string-list) (rest (rest string-list))))
                  (get-maximium (rest string-list))]))

【问题讨论】:

    标签: string list substring racket


    【解决方案1】:

    else 部分存在问题。它应该是这样的:

    (define (get-maximium string-list)
      (cond [(null? string-list) '()]
            [(= 1 (length string-list)) string-list]
            [(string>=? (first string-list) (first (rest string list)))
             (get-maximium (cons (first string-list) (rest (rest string-list))))]
            [else (get-maximium (rest string-list))]))
    

    另外,不用问(equal? #t <condition>),直接问<condition>即可。

    【讨论】:

      【解决方案2】:

      尝试像这样检索答案的第一个元素:

      (define (last-substring-w-len s n)
        (first ( get-maximium (substrings-w-len s n))))
      
      (last-substring-w-len "foobar" 4) => "ooba"
      (last-substring-w-len "thequickbrownfoxjumpsoverthelazydogs" 7) => "xjumpso"
      

      详细解释见my answer here

      【讨论】:

        猜你喜欢
        • 2021-08-03
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        相关资源
        最近更新 更多