(DrRacket)创建学生电子邮件时出现字符串操作问题

(DrRacket)创建学生电子邮件时出现字符串操作问题,racket,Racket,当goose电子邮件长度小于9时,我很难找到第一个名字的字符串部分 (check-expect( goose-mail "becky""anderson"12)"12abecky@uragoose.ca") 在Goose大学,学生会根据自己的名字和特殊ID获得一个唯一的用户名 数字用户名以特殊ID号开头,后跟其最后一个字母的第一个字母 然后是他们的名字。所有用户名的最大限制为 9个字母,因此通常只包括名字的一部分。所有的 用户名是小写的。特殊ID号是小于1000的正整数。这个 电子邮件地址是附

当goose电子邮件长度小于9时,我很难找到第一个名字的字符串部分

(check-expect( goose-mail "becky""anderson"12)"12abecky@uragoose.ca")
在Goose大学,学生会根据自己的名字和特殊ID获得一个唯一的用户名 数字用户名以特殊ID号开头,后跟其最后一个字母的第一个字母 然后是他们的名字。所有用户名的最大限制为 9个字母,因此通常只包括名字的一部分。所有的 用户名是小写的。特殊ID号是小于1000的正整数。这个 电子邮件地址是附加有“@uragoose.ca”的用户名。 编写一个Racket函数goosemail,它使用两个非空字符串first name,last name, 和一个非负整数ID num,其中0≤ ID编号≤ 999并生成 具有指定名字和姓氏以及ID号的学生。名字和姓氏为 以小写字母提供。 > 到目前为止,我得到的是

(check-expect(1st-last-name-letter "pham")"p")
(define(1st-last-name-letter L)
  (substring L 0 1))

(check-expect(ID-num 12)"12")
(define (ID-num ID)
  (number->string ID))


(check-expect(user-name "andrew" "pham" 123)"123pandrew")

(define(user-name first-name last-name ID)

(string-append (string-append(ID-num ID)(1st-last-name-letter last-name))
first-name) )

我们只需要检查结果用户名的长度,并在必要时将其修剪为所需大小:

(define (user-name first-name last-name ID)
  (let ((username (string-append (ID-num ID) (1st-last-name-letter last-name) first-name)))
    (if (<= (string-length username) 9)
        username
        (substring username 0 9))))

嗨,我已经投票取消删除。@WillNess谢谢!那个人看起来好像OP得到了他的答案,不想分享:-我希望我们的两张票就足够了。我会把它标记出来让mod取消删除。