友達を感動させる10のラケットシングルライナー

私の好きな言語で忘れられていた「10人のワンライナー」のトピックに戻りたいと思います。 Habréに関するストーミーな議論は数ヶ月前でした。 残念ながら、実際にシングルライナーを引用した人は多くなく、読める人も多くありませんでした。 私は、いくつかの場所で元のScalaの例を凌ぐ、ラケットのバージョンを提案したいと思います。





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)]))
      
      





しかし、この問題に対する他のすべての解決策と同様に、私はそれを「梯子に」分解します。




All Articles