大佬教程收集整理的这篇文章主要介绍了Clojure:列表中的复杂迭代?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
user=> (func 20 '(1 2 3 4 5 6 7 8 9 10)) '(:0 1,:0 2,:2 3,... :20 0)@H_944_19@然而,我正在寻找如何遍历列表的难以置信的困难时期.有人可以帮助我理解如何独立使用列表的元素,然后如何返回20除以的元素,如果它返回一个余数? @H_944_19@我的想法是在计算平方根的程序中使用这样的东西.如果数字由余数键入,那么我可以查询集合以获得将输入除以0的余数的所有数字. @H_944_19@这是我的初步方法. @H_944_19@
;; My idea on the best way to find a square root is simple. ;; If I want to find the square root of n,divide n in half ;; Then divide our initial number (n) by all numbers in the range 0...n/2 ;; Separate out a list of results that only only return a remainder of 0. ;; Then test the results in a comparison to see if the elements of our returned ;; list when squared are equal with the number we want to find a square root of. ;; First I'll develop a function that works with evens and then odds (defn sqroot-range-high-end [input] (/ input 2)) (sqroot-range-high-end 36) ; 18 (defn make-sqrt-range [input] (range (sqroot-range-high-end (+ 1 input)))) (make-sqrt-range 36) ; '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18) (defn zero-culler [input] (lazy-seq (remove zero? (make-sqrt-range input)))) (zero-culler 100) ; '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18) (defn odd-culler [input] (lazy-seq (remove odd? (zero-culler input)))) (odd-culler 100) ; '(2 4 6 8 10 12 14 16 18) ;;the following is where I got stuck ;;I'm new to clojure and programming,;;and am just trying to learn in a way that I understand (defn remainder-culler [input] (if (/ input (first odd-culler (input))) input) (recur (lazy-seq (input))) ) (remainder-culler 100)
group-by
功能.你给它一个函数和一个集合,它返回一个包含该集合中所有项目的映射,由每个值应用f的结果键入.
@H_944_19@
> (group-by #(rem 20 %) [1 2 3 4 5 6 7 8 9 10]) {0 [1 2 4 5 10],2 [3 6 9],6 [7],4 [8]}@H_944_19@如果要将密钥设为实际关键字,则必须修改匿名函数以返回关键字: @H_944_19@
> (group-by #(keyword (str (rem 20 %))) [1 2 3 4 5 6 7 8 9 10]) {:0 [1 2 4 5 10],:2 [3 6 9],:6 [7],:4 [8]}@H_944_19@请注意,返回值在向量中.这是因为您无法从单个键映射到两个项目(即映射编码函数). @H_944_19@迭代/列表理解 @H_944_19@现在,所有这些说,我不确定这是你在寻找什么.你问道,“有人可以帮我理解如何独立地使用列表的元素,如果它返回一个余数?”这听起来像是
for
的情况.出于您的目的,您可以将其视为迭代,但它确实在做list comprehension.
@H_944_19@
(for [i [1 2 3 4 5 6 7 8 9 10]] (list (rem 20 i) i))@H_944_19@再一次,如果您确实想要使用关键字而不是值,那么您可以这样做: @H_944_19@
(for [i [1 2 3 4 5 6 7 8 9 10]] (list (keyword (str (rem 20 i))) i))@H_944_19@在这个特殊情况下,正如凯尔指出的那样,你可能只是使用map: @H_944_19@
(map #(list (keyword (str (rem 20 %))) %) [1 2 3 4 5 6 7 8 9 10])@H_944_19@如果您不喜欢这些返回的嵌套结构,可以在它们上使用
flatten
.
@H_944_19@过滤
@H_944_19@但我仍然不确定你是否希望这可以解决你的问题.在您的评论中,您有“单独列出只返回剩余0的结果列表”.这听起来像是filter
的一个案例,作为一个副作用是懒惰的.
@H_944_19@
> (filter #(zero? (rem 20 %)) [1 2 3 4 5 6 7 8 9 10]) (1 2 4 5 10)@H_944_19@当当.它只是吐出满足您需求的原始系列元素. @H_944_19@希望这可以帮助.它不会让你一直朝着你的目标前进,但我希望它能为你提供一些可以用来实现目标的简洁工具.你有选择!在你学习的过程中,可以选择多种选择.如果你读到某个地方比另一个更好,看看你能否找出原因.
以上是大佬教程为你收集整理的Clojure:列表中的复杂迭代?全部内容,希望文章能够帮你解决Clojure:列表中的复杂迭代?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。