1.リスト内の各アイテムを2倍に
これを行うことができます:
(for/list ((i (in-range 10))) (* 2 i))
または:
(map (curry * 2) (build-list 10 (λ (x) x)))
2.リスト内のすべての数値を要約します
(apply + (build-list 10000 (λ (x) x)))
3.部分文字列を確認します
(define wordlist '("Racket" "akka" "play framework" "sbt" "curring")) ; (define tweet "This is an example tweet talking about Racket and curring") ;
最初の出現箇所を検索します(見つからない場合は#fを返します)。
(findf (curryr regexp-match? tweet) wordlist)
ツイートに含まれる部分文字列をワードリストから選択します。
(filter (curryr regexp-match? tweet) wordlist)
4.ファイルからの読み取り
(file->string "file.txt") ; (file->lines "file.txt") ;
5.曲「Happy Birthday」の印刷
時間オプション
(for-each (λ (x) (display (string-append "Happy Birthday" (if x ", dear John" " to You") "\n"))) '(#f #f #t #f))
2つのオプション
(for ((x (in-range 4))) (display (string-append "Happy Birthday" (if (= x 2) ", dear John" " to You") "\n")))
3つのオプション
(display-lines (build-list 4 (λ (x) (string-append "Happy Birthday" (if (= x 2) ", dear John" " to You")))))
6.数字のリストのフィルタリング
(partition (curry > 60) '(49 58 76 82 88 90))
2つのリストを返します。1つは条件に一致し、もう1つは一致しません。
7. WebサービスからXMLを取得および解析する
標準ライブラリをダウンロードします。
(require net/url xml)
次のアクションは、結果のxmlをタイプドキュメントの構造に入れます
(define doc (read-xml (get-pure-port (string->url "http://search.twitter.com/search.atom?&q=racket"))))
必要に応じて、結果のドキュメントを解析して、ツリー(Lispのネイティブ形式、ラケット)に変換できます。
(xml->xexpr (document-element doc))
8.リストで最小(または最大)を検索します
数字を追加するよりも複雑ではありません:
(apply max '(14 35 -7 46 98)) (apply min '(14 35 -7 46 98))
9.並列処理
いくつかのデータがあります。 テストとして、通常のリストを示します。
(define data-list '(ABCDEFGH))
そして、いくつかの手順があります。 わかりやすくするために、シンボルの複数の印刷を選択します。
(define (process sym) (for ((n (in-range 10))) (display sym)))
並列処理は次のように始まります。
(for ((x data-list)) (thread (λ () (process x))))
10.エラトステネスのふるい
タスクはかなりアルゴリズム的です。 それを解決する方法はたくさんあります。
以下は2から最大までの数字のリストです
(define (eratosphen max) (let er ([lst null] [cur 2]) (cond [(> cur max) (reverse lst)] [(ormap (λ (x) (= (remainder cur x) 0)) lst) (er lst (add1 cur))] [else (er (cons cur lst) (add1 cur))])))
これは1行で書く価値はありません。
また、EratosthenesのSieveメソッドを使用して簡単に番号を確認する必要がある場合、コードは実際に行に収まります(確認する番号は113でなければなりません)。
(let check ([cur 2] [n 113]) (cond [(= (remainder n cur) 0) #f] [(> (sqr cur) n) #t] [else (check (add1 cur) n)]))
しかし、この問題に対する他のすべての解決策と同様に、私はそれを「梯子に」分解します。