在DrRacket中,我如何更改使用if语句的程序,而不是使用条件语句

时间:2019-06-19 00:23:38

标签: string list substring racket

这是我要解决的问题

  

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

     

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

     

请记住要考虑您的函数是否需要其任何功能   争论!

     

例如:

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

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

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

这是我的原始代码:

(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")

这将在只产生“ ooba”的情况下产生(list "ooba"),因此我需要将列表转换成我应该能够解决的字符串,但是如果有人可以帮助我,我将不胜感激。 / p>

现在的主要问题是我想用条件语句替换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))]))

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

(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