首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分解向量以用作函数参数

如何分解向量以用作函数参数
EN

Stack Overflow用户
提问于 2012-05-29 23:03:03
回答 3查看 5.9K关注 0票数 12

在Python中,您可以将列表或元组传递给函数,并让函数解压缩参数。我如何在Clojure中做到这一点?以下是一些示例Python代码:

代码语言:javascript
复制
def f (a, b, c, *d):
    print "a: ", a
    print "b: ", b
    print "c: ", c
    print "d: ", d

f (1, 2, 3, 4, 5, 6)

print
v = (4, 5, 6)
f(1, 2, 3, *v)

结果:

代码语言:javascript
复制
a:  1
b:  2
c:  3
d:  (4, 5, 6)

a:  1
b:  2
c:  3
d:  (4, 5, 6)

在我的clojure代码中:

代码语言:javascript
复制
(defn f [a b c & d]
  (println "a: " a)
  (println "b: " b)
  (println "c: " c)
  (println "d: " d))

(f 1 2 3 4 5 6)

(println)
(def v [4 5 6])
(f 1 2 3 v)

结果:

代码语言:javascript
复制
a:  1
b:  2
c:  3
d:  (4 5 6)

a:  1
b:  2
c:  3
d:  ([4 5 6])

D只有一个元素,我怎么能让result作为python代码呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-29 23:43:07

Clojure不会像Python那样从具有语言特性的向量中解压参数。

最接近解包的是函数apply

在这种特殊情况下:

代码语言:javascript
复制
(def v [4 5 6])
(apply f (concat [1 2 3] v))

打印:

代码语言:javascript
复制
a:  1
b:  2
c:  3
d:  (4 5 6)
票数 13
EN

Stack Overflow用户

发布于 2012-11-21 06:18:18

只是为了完整性。

假设您有一个以向量[d1 d2 d3]为参数的函数

代码语言:javascript
复制
(defn f
  [a b c [d1 d2 d3]]
  (println "a: " a)
  (println "b: " b)
  (println "c: " c)
  (println "d1: " d1)
  (println "d2: " d2)
  (println "d3: " d3))

这样,我们就可以从传递给函数f的向量中获取前3项作为d1 d2 d3。调用上述函数将产生以下输出:

代码语言:javascript
复制
=> (f 1 2 3 [6 7 8 9])
a:  1
b:  2
c:  3
d1:  6
d2:  7
d3:  8

请注意,即使向量包含4个项目,我们也只接受前3个项目。

票数 5
EN

Stack Overflow用户

发布于 2012-05-30 06:43:47

对于Clojure中的任何参数,都可以通过使用sequence?在下面的伪代码中,

代码语言:javascript
复制
(if (sequential? v)
   (do-something-because-it's-a-sequence v)
   (do-something-different-because-it's-not-a-sequence v))

因此,在Clojure中,您可以通过确定是否具有序列来完成与Python示例中相同的任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10801744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档