Вот вопрос, который я пытаюсь решить
Написать функцию (last-substring-len s n)
.
Он потребляет Str и Nat и возвращает подстроку s с длиной n, которая идет в алфавитном порядке.
Не забудьте подумать, требует ли ваша функция что-либо из своих аргументов!
Например:
(last-substring-len "foobar" 4) => "ooba"
(last-substring-len "thequickbrownfoxjumpsoverthelazydogs" 7) => "xjumpso"
Я фактически почти решил свой вопрос, но хочувместо этого можно изменить мой код так, чтобы операторы if для функции get-maximium были заменены на операторы 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», поэтому мне нужно преобразовать список в строку, которую я смогу решить самостоятельно, но я был бы признателен, если бы кто-то мог помочь мне с этим.
Основная проблема сейчас, хотяя хочу заменить оператор if в get-Maximum условным оператором
Это я изменяю функцию get-maximium, чтобы попытаться заменить функции if на оператор cond, но он пока не работает.
(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))]))