需要帮助了解BSL(DrRacket)中的功能

需要帮助了解BSL(DrRacket)中的功能,racket,racket-student-languages,Racket,Racket Student Languages,语言BSL-DrRacket(球拍变体) 问题:我需要理解下面的函数到底做了什么。特别是子字符串位,我不明白在选择是否将“?”附加到已使用的字符串时,它是如何确定字符串末尾是否有“?”的 (define (ensure-question str) (if (string=? (substring str (- (string-length str) 1)) "?") str (string-append str "?"))) (子字符串s位置)函数从特定位置返回字符

语言BSL-DrRacket(球拍变体)

问题:我需要理解下面的函数到底做了什么。特别是子字符串位,我不明白在选择是否将“?”附加到已使用的字符串时,它是如何确定字符串末尾是否有“?”的

(define (ensure-question str)
  (if (string=? (substring str (- (string-length str) 1)) "?")
      str
      (string-append str "?")))
(子字符串s位置)
函数从特定位置返回字符串
s
的子字符串。例如:
(子字符串“Apple”1)
返回
“pple”
,因为我们从第一个字符中取下标

(substring "Apple" ( - (string-length "Apple") 1))
将返回
“e”


我们只取最后一个字符
((字符串长度str)1))
,并使用函数
字符串=?
检查它是否等于
“?”
。我现在明白了。谢谢