- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从长度为 n 的列表中计算出 n 个组合中的 k 个。我发现python代码非常简洁,所以我直接翻译了。
def comb(sofar, rest, n):
if n == 0:
print sofar
else:
for i in range(len(rest)):
comb(sofar + rest[i], rest[i+1:], n-1)
comb("", "abcde", 3)
产量:abc、abd、abe 等...
将被翻译为 clojure 代码:
(defn comb [sofar v n]
(if (= n 0)
(print sofar)
(for [i (range 0 (count v))]
(comb (str sofar (nth v i)) ;don't it need to be recur ?
(subvec v (inc i))
(dec i)))))
嵌套循环/递归非常令人困惑。
问题是如何更改代码以执行与 python 代码相同的功能?
我的 clojure 代码似乎没有做同样的工作。
最佳答案
首先,如果您想要一个 clojure 解决方案,请用 clojure 术语来思考,在序列上编写函数,以惰性序列的形式生成结果,并让最终消费者在需要时将其减少为字符串。下面,我根本不使用 print,只是返回惰性序列,并让 repl 成为打印机。
此外,您试图将 python for
直接转换为 clojure for
来进行循环,这不是它的用途(没有双关语)。 clojure's for
是一个序列生成器,所以您可能会感到困惑。
要获得问题的简单解决方案,您可以使用 math.combinatorics :
user=> (require '[clojure.math.combinatorics :as m])
user=> (m/combinations "abcde" 3)
((\a \b \c) (\a \b \d) (\a \b \e) (\a \c \d) (\a \c \e) (\a \d \e) (\b \c \d) (\b \c \e) (\b \d \e) (\c \d \e))
如果需要,您可以编写一个映射将其转换为字符串,以获得与 python 相同的输出。
user=> (map #(apply str %1) (m/combinations "abcde" 3))
("abc" "abd" "abe" "acd" "ace" "ade" "bcd" "bce" "bde" "cde")
但是,我怀疑您正在寻找更多有关循环的教程。
有another solution to this problem here用于创建一个函数以将序列返回为字符,该函数生成与上面示例相同的序列,并且也可以包装在映射中以进行字符串输出。它使用带有 cond block 的递归来控制迭代的结束。
Here is another good article通过将问题解构为本质上递归的东西来进行相同的组合,并解释它如何与递归一起工作。
如果您想了解有关递归与命令式循环的更多信息,请查看this SO question。 .
和here is a gist提供一些循环/递归与阶乘递归的示例,以便您可以直接看到两者之间的语法风格。
就习惯编写生成这样的序列的函数而言,我发现 The Little Schemer是解释思维过程的绝佳资源。它是用方案编写的,但很容易理解并应用于 clojure。之后,您可以查看高阶函数(map/reduce)而不是使用循环。
总而言之,在执行此操作时,如果您到处使用惰性函数,那么您的结果通常会是惰性的,并且如果您进行递归,则需要尝试使用尾递归,这样在使用时就不会破坏堆栈大组合,并转储您不感兴趣的值。
关于recursion - 将 python 代码翻译为 clojure、递归和 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30723353/
翻译自官方wiki: https://github.com/facebook/rocksdb/wiki/Write-Stalls 转载请注明出处: https://www.cnblogs.c
译者注:在微服务架构设计,构建API和服务间通信技术选型时,对 REST 和 gRPC 的理解和应用还存在知识盲区,近期看到国外的这篇文章: A detailed comparison of
rocksdb调试指引 翻译自官方wiki: https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide 转载请注明出处: h
传统的ASP.NET Web Forms是一个非常好的主意,但现实需求非常复杂。随着时间的推移,现实世界的项目暴露出Web Forms的一些不足之处: “沉重的”视图状态:现实中在http请求之间
翻译自:Top 10 questions of Java Strings 简单地说,”==”测试两个字符串的引用是否相同,equals()测试两个字符串的值是否相同。除非你希望检
你好,今天我要和大家分享一些东西,举例来说这个在JavaScript中用的很多。我要讲讲回调(callbacks)。你知道什么时候用,怎么用这个吗?你真的理解了它在java环境中的用法了吗?当我也问
Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个
原文: [A Dive into .Net 8 Native AOT and Efficient Web Development] 作者: [sharmila subbiah] 引言 随着 .NE
这是Fiddle 是否可以在 angular-translate 中检查其他语言的键值是否可用,然后它可以从其他语言中提取该键值? 就像在示例中,我有英语和西类牙语。并且一个键值(例如“CONFIRM
我希望能够使用 $this->__('String to translate')在外部脚本中。我该怎么做呢? Magento 版本 1.5.1.0 . 最佳答案 我认为设置语言环境的正确方法是: Ma
我有一个开关小部件,它使用自定义数据属性值来标记自己。 .switch.switch-text .switch-label::before { right: 1px; color: #c2cf
是否有人遇到过这样的情况:用 Java 编写并由(例如)法国程序员编写的现有代码库必须转换为英语程序员可以理解的代码?这里的问题是变量/方法/类名称、注释等都将采用该特定语言。 现在有可用的自动化解决
维基百科和其他一些网站将解释器描述为将代码从某种高级语言翻译成某种低级语言的翻译器。然而,有很多解释,包括在 stackoverflow 中,它说解释器直接执行作为输入的指令,而无需事先转换。那么解释
我想将基本动画应用于自定义单元格中的某些元素,例如标签、图像:特别是,我想让这些动画在我触摸单元格内部时也启动。我是初学者,我只学会了使用 animateWithDuration 和 transiti
这个问题在这里已经有了答案: NSDateFormatter and current language in iOS11 (5 个回答) 已关闭 3 年前。 当使用这样的 DateComponentF
我想在点击 var about 时移动 div.willshow。但我单击那个 btn,只有它获得类 active。然后我再次单击那个 btn 它失去了类。如果我再点击一次,每项任务都无法正常工作。
我想要一个按钮在悬停时向下移动几个像素,但它又回来了。当您还在上面徘徊时,它不应该留在原处吗? Email Me .btn {background: #2ecc71; padding: .5em 1e
在我的应用程序中,我想添加功能将页面翻译为用户在浏览器中设置的所有语言,如果没有可用的语言,则翻译为默认英语...问题是浏览器与语言支持不一致。我找到了一个解决方法,我对一些返回用户语言的 Web 服
我的应用程序有一个 Help.htm 文件,用谷歌翻译翻译得相当好。我想将菜单项标记为“请勿翻译”,但我发现并尝试过的 HTML 标签都不起作用。对于以下内容,我使用了谷歌翻译网站 - 它翻译了我没想
我有以下代码: span { width:200px; height:100px; background-color:red; border:1px solid black; } span.c2 {
我是一名优秀的程序员,十分优秀!