【问题标题】:Clojure program, basic programmingClojure程序,基础编程
【发布时间】:2015-12-26 01:55:04
【问题描述】:

你能帮我解决下面的问题吗?非常感谢。

编写一个 clojure 程序。给定整数 L 和 t,如果存在长度为 L 的 Text 的连续子字符串且 Pattern 至少出现 t 次,则字符串 Pattern 在(更大的)字符串 Text 内形成一个 (L, t)-clump。例如,TGCA 在以下文本中形成 (25,3)-团块:gatcagcataagggtcccTGCAATGCATGACAAGCCTGCAgttgttttac。编写一个带有四个参数 Text、k(整数)、L(整数)、t(整数)的函数 findclumps,它返回一个长度为 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))))

【问题讨论】:

  • 发布您尝试过的代码、给定输入的预期输出以及您具体寻求帮助的问题。
  • 预期输出是 - (def text “CGGACTCGACAGATGTGAAGAAATGTGAAGACTGAGTGAAGAGAAGAGGAAACAC GACACGACATTGCGACATAATGTACGAATGTAATGTGCCTATGGC”) (find-clumps text 5 75 4) 返回 (“CGACA” “GAAGA” “AATGT”) 帮助我了解如何开始和接下来的基本步骤,因为我不知道。我将在这里尝试并发布我的输出和代码。非常感谢。
  • 由于这个问题与您之前提出的问题基本相同,我将把它们链接起来,以便一起回答。该问题被标记为“搁置”,因为需要对其进行编辑并使其更清楚才能得到回答。请编辑该 euestion 以包括对您要解决的两个问题的明确定义、每个问题的输入示例以及每个问题的预期输出。编辑完成后,我将重新打开问题,以便人们提供答案。
  • How To Do Clojure Program? 的可能重复项
  • 使用我尝试过的上一个步骤,我得到的解决方案为 (find-clumps text 5 75 4) {"AATGT" "GAAGA") 但我需要输出为 (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 [kt text] (->> (k-mers k text) (frequencies) (filter #(> windows (map #(most-frequent-k-mers kt %)) (map set) (apply clojure.set/union)))))

标签: clojure


【解决方案1】:

试试这个:

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

:)

【讨论】: