1

名のリストと姓のリストを取得し、名の最初の文字と姓の最大 7 文字と @yahoo を使用して電子メール アドレスの新しいリストを作成する質問を見つけようとしています。 .com。

例:

(check-expect 
    (emails-list (list "John" "Sarah") (list "King" "Dickinson")) 
    (list "jking@yahoo.com" "sdickins@yahoo.com"))

(check-expect (emails-list empty empty) empty)

これまでのところ、私は持っています:

(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 が (appendnames (rest alof) (rest alos)) になるように再帰をどこに置くかです。

私が得ることができる助けをありがとう!

4

2 に答える 2

1

さて、これは宿題のようなものなので、ヒントをいくつかあげておきます。問題は自分で解決してみるとよいでしょう。最初に、問題を 2 つの部分に分割して簡単にします。

(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

もちろん興味深い部分は、実際の電子メールを作成することです。利用可能な文字文字列の手順を参照してください。一般的な考え方は次のとおりです。

(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 であるか、文字列の長さが 7 未満の場合は文字列の長さのいずれかであることを覚えている限り、姓から最大で7 文字に関心があることに注意してください。これは手順で簡単に取得できます。substring

于 2013-03-18T22:19:10.623 に答える
0

まだ読んでいない場合は、HtDP のこの章を読む必要があります。この章では、2 つの複雑な入力を受け取る関数を設計する方法について説明しています。

http://htdp.org/2003-09-26/Book/curriculum-ZH-22.html

HtDP の章では、2 つの複雑な引数を処理する必要がある 3 種類の状況 (または「ケース」) について説明しています。解決しようとしている問題に一致する状況はどれですか?

condいくつの句を用意する必要がありますか? 彼らは何ですか?各句の回答部分で使用できるものは何ですか? (つまり、関数のテンプレートは何ですか?)

ここまで来たら、コードを入力するのはかなり簡単なはずです。行き詰まった場合は、具体的な例を参考にしてください。

于 2013-03-18T22:30:57.530 に答える