我正在尝试找出一个问题,该问题包含名字列表和姓氏列表,并使用名字的第一个字母和最多7个姓氏的字母创建一个新的电子邮件地址列表和@ yahoo.com。
例如: (check-expect(电子邮件列表(列表“John”“Sarah”)(列表“King”“Dickinson”))(列表“jking@yahoo.com”“sdickins@yahoo.com”))
(check-expect(电子邮件列表为空)为空)
到目前为止,我有:
(define (appendnames alof alos)
(cond [(and (empty? alof) (empty? alos)) empty]
[else (string-append
(substring (first alof) 0 1)
(cond [(< (string-length (first alos)) 8) (first alos)]
[else (substring (first alos) 0 7)])
"@yahoo.com")]))
(define (emails-list alof alos)
(cond [(and (empty? alof) (empty? alos)) empty]
[else (appendnames alof alos)]))
我不知道怎么做的是如何使第一个字母小写以及放在递归的位置,以便附加名称(appendnames(rest alof)(rest alos))。非常感谢我能得到任何帮助!
答案 0 :(得分:1)
嗯,这看起来像是家庭作业所以我会给你一些提示,如果你试图通过自己的方式解决问题会好得多。第一件事是 - 将问题分成两部分,使其更简单:
(define (emails-list alof alos)
(if <???> ; if any of the lists is empty
<???> ; return the empty list
(cons (make-email <???> <???>) ; create a new email with current values
(emails-list <???> <???>)))) ; and advance the recursion
当然,有趣的部分是创建实际的电子邮件。请参阅可用的character和string程序,以下是一般概念:
(define (make-email name surname)
(<???> ; convert the whole string to lowercase
(<???> ; append the three parts of the email
(string (<???> name 0)) ; create a new string with the frist char in name
<???> ; create a substring with last name (*)
"@yahoo.com"))) ; add the email domain
标有(*)
的步骤需要更多解释。请注意,我们感兴趣的是最多来自姓氏的七个字符,只要我们记住结束索引是7或者是substring
程序,就可以轻松获得{{1}}程序。 string的长度,如果字符串的长度小于7。
答案 1 :(得分:0)
如果你还没有读过它,你应该阅读HtDP的这一章,它解释了如何设计带有两个复杂输入的函数:
http://htdp.org/2003-09-26/Book/curriculum-Z-H-22.html
HtDP章节讨论了需要处理两个复杂参数的三种情况(或“案例”)。哪种情况符合您要解决的问题?
你应该有多少cond
条款?这些是什么?你有什么可以在每个条款的答案部分工作? (换句话说,函数的模板是什么?)
一旦你走得那么远,填写代码应该很容易。如果您遇到困难,请使用具体示例来帮助您。