【问题标题】:Splice in ClojureClojure 中的拼接
【发布时间】:2012-07-23 07:25:17
【问题描述】:

是否有一个函数可以按顺序获取“从 x 到 y”的项目?

例如,给定(range 10),我想要 [5 6 7 8](从第 6 位取到第 9 位,或者从第 6 位取 4,)。当然,我可以结合几个函数(例如(take 4 (drop 5 (range 10))))来实现它,但似乎很奇怪没有像pythons 的mylist[5:9] 这样的内置函数。谢谢

【问题讨论】:

    标签: clojure


    【解决方案1】:

    subvec 用于向量,主要是因为它是 O(1)。对于 seq,您需要使用 take/drop 的 O(n)。

    【讨论】:

      【解决方案2】:

      从哲学的角度来看,没有内置运算符的原因是您不需要内置运算符来让它感觉像在 Python 中那样“自然”。

      (defn splice [coll start stop]
        (take (- stop start) (drop start coll)))
      
      (splice coll 6 10)
      

      感觉就像是一种内置语言,具有与任何功能一样多的“新语法”。在 Python 中,特殊的 [x:y] 运算符需要语言级别的支持才能使其与单元素访问器一样自然。

      因此,Clojure 不会弄乱(已经很拥挤的)语言核心,而是简单地为用户或库留出空间来实现这一点。

      【讨论】:

        【解决方案3】:

        (range 5 9),或(vec (range 5 9))

        (也许range 的这种语法在 2012 年年中不可用。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 1970-01-01
          • 2014-01-11
          • 2017-08-02
          • 2013-05-29
          • 1970-01-01
          相关资源
          最近更新 更多