Clojure计划,基本编程

时间:2015-09-28 18:28:29

标签: clojure

你可以帮我解决下面的问题。非常感谢。

写一个clojure程序。给定整数L和t,字符串Pattern在(较大的)字符串内形成(L,t)-clump文本,如果存在长度为L的Text的连续子字符串,其中Pattern至少出现t次。例如,TGCA在以下文本中形成(25,3) - 团块:gatcagcataagggtcccTGCAATGCATGACAAGCCTGCAgttgttttac。编写一个函数findclumps,其中包含四个参数Text,k(整数),L(整数),t(整数),它返回长度为k的序列字符串,形成Text中的(L,t)-clump。例如:( def text“CGGACTCGACAGATGTGAAGAAATGTGAAGACTGAGTGAAGAGAAGAGGAAACAC GACACGACATTGCGACATAATGTACGAATGTAATGTGCCTATGGC”)(find-clumps text 5 75 4)返回(“CGACA”“GAAGA”“AATGT”)

(defn k-mers 
 [k text] 
 (map #(apply str %) (partition k 1 text))) 

(defn most-frequent-k-mers 
 [k t text] 
 (->> (k-mers k text) 
      (frequencies) 
      (filter #(<= t (second %))) (map first))) 

(defn find-clump 
 [k L t text] 
 (let [windows (partition L 1 text)] 
   (->> windows 
        (map #(most-frequent-k-mers k t %)) 
        (map set) (apply clojure.set/union))))

1 个答案:

答案 0 :(得分:0)

试试这个:

(defn find-clumps
  [text k l t]
  (map #(apply str (first %))
       (into #{}
             (filter #(= (second %)
                         t)
                     (mapcat #(frequencies (partition k 1 %))
                             (partition l 1 text))))))

:)