首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下面的函数式编程模式的正确术语是什么?

下面的函数式编程模式的正确术语是什么?
EN

Stack Overflow用户
提问于 2010-08-16 12:24:43
回答 1查看 746关注 0票数 10

我听说它被称为http://mitpress.mit.edu/sicp/full-text/sicp/book/node72.htmlhttp://en.wikibooks.org/wiki/Clojure_Programming/Concepts#List_Comprehension,有时甚至是https://stackoverflow.com/questions/1587412/lazy-infinite-sequences-in-clojure-and-python

以下模式的正确术语是什么?(所示的code代码)

代码语言:javascript
复制
(def first$ first)

(defn second$ [str]
  (cond
    (empty? str) ()
    true ((first (rest str)))))

(defn stream-builder [next_ n]
  (cons n (cons (fn [] (stream-builder next_ (next_ n))) ())))

(defn stream [str n]
  (cond
    (= 0 n) ()
    true (cons (first$ str) (stream (second$ str) (- n 1)))))

(def odd 
  (stream-builder (fn [n] 
        (+ 2 n))1))

(println (stream odd 23))

> (1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-16 13:04:52

简单回答:stream-builder返回一个返回无限序列/列表的函数,该函数必须被计算为“懒惰”(因为不能在有限的时间内计算无限长的值)。在Clojure世界中,您可能不应该将示例中的任何东西称为“流”,以避免与另一个概念混淆。

较长的答覆:

编程语言中思维多样性的一个不幸的副作用是,我们经常使用相同的词来表达不同的含义。你提到的所有三个词(“流”、“无限列表”、“懒惰序列”)都是以串行方式表示处理元素,在Clojure中我们称之为“序列”,然而,每一个词所隐含的细微差别都略有不同。

“流”一般是指某种元素序列,目前常用于有限字符序列的上下文中。这些字符序列通常来自文件、网络源或Unix管道。

如果定义一个序列的方式是有无限个元素,我们可以称它为无限序列。通常无限序列在内部被表示为一个链表,所以我们可以称之为“无限列表”。不过,老实说,我更希望在Clojure社区中听到“无限序列”这个术语,这样我们就不会被特定的实现所束缚。

最后,Clojure中的“懒散序列”的细微差别是指对“按需”的数据结构进行顺序计算的模式。换句话说,这里的重点是评估的惰性性质;序列中某个特定元素的值直到您请求它才会实际计算出来。

总之,在Clojure中,您应该使用以下几个词:

  • “列表”指具有链接列表实现的内容
  • “懒惰”指的是按需评估的东西
  • “无限”指不是有限大小的序列(因此必须是懒惰的)
  • “流”指来自外部源的类似管道的(字符)序列。
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3493047

复制
相关文章

相似问题

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