这是我要解决的问题
编写一个函数
(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))]))
答案 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