【问题标题】:SICP terminology : difference between procedure and operationSICP术语:程序和操作之间的区别
【发布时间】:2014-10-12 22:06:12
【问题描述】:

“程序”一词是否与 SICP 中的“操作”一词同义? (例如在下面的章节中。)如果它们不一样,有什么区别,为什么?

更具体地说,“复合操作”和“复合过程”有什么区别?有没有 ?

SICP Chapter 1.1.4 Compound Procedures

这是本书的另一个相关章节:

SICP Chapter 1.2 Procedures and the Processes They Generate

在我看来,在这些上下文中,SICP 中的“运算”一词指的是算术运算(因为到目前为止的示例中没有使用其他类型的运算 - 无论它们是什么一般的运算)。

【问题讨论】:

  • 我明白你的意思,我感谢你的建议,我尝试遵循它。我只是假设像 SICP 这样备受推崇的书在使用术语方面是准确的,并且他们使用的术语有明确的定义。就我个人而言,我不会写一篇在我第一次使用时没有明确解释我使用的术语的技术文本,除非熟悉该领域的读者清楚这些术语的含义。但是,由于 SICP 是介绍性文本,因此我希望在术语第一次出现时给出明确的定义。
  • @jhegedus 我认为 SICP 本身不是技术文本。 :) 他们开始使用 Scheme 甚至没有解释它是什么。
  • @jhegedus 对于某些类型的技术文本,这是完全合理的期望。但是,不同的文本确实采用不同的方法;有些人采取更苏格拉底式的方法,在这种方法中,概念的发展和提炼更加有机,直到一个好的、精确的定义被梳理出来。 (The Little Schemer 是另一个很好的例子。)在我看来,SICP 必须采用类似的方法,因为在本书的后面部分中,您将实现 一个方案,你可以看到不同的语言实现如何导致不同的行为(字面意思,...
  • 计算机程序的不同结构解释)。例如,确定“什么是缺点单元”可能很棘手,因为有很多方法可以实现它。或者“什么是变量绑定”,因为不同的实现方法会导致动态作用域,或词法作用域和词法闭包。特定于语言实现的术语有点模糊,因为事情可能会有所不同。
  • 这个问题正在 Meta 上讨论:meta.stackoverflow.com/q/284577/3001761

标签: scheme lisp terminology sicp


【解决方案1】:

“操作”无论是原始的还是复合的,都是一些实际的计算,例如加法,例如在已编译程序的汇编代码中,就像数字是实际的计算对象,计算机内存中的实体一样。

“过程”是编程语言的一部分,它表达/描述操作。编程语言允许我们定义表达一些原始操作的过程,并通过组合它们,一些更复杂的操作:

(define (sum x y) (+ x y))   ; a procedure expressing  primitive operation

(define (sum-squares x y)    ; a procedure describing a more complex operation
    (+ (* x x) (* y y)))     ;  defined by means of combining the operations

【讨论】:

  • 我们用O表示操作集,用P表示过程集。从P到O是否存在单射函数? en.wikipedia.org/wiki/Injective_function
  • 非终止程序呢?他们有相应的操作吗?还是对应的操作底部?
  • "是否存在从 P 到 O 的单射函数?"显然不是:(define (double1 x) (* x 2))(define (double2 x) (* x 2)) 都描述了相同的操作。
  • "非终止过程是否对应于某些操作?"我认为是的,对于非终止的,例如(define (f) (f)) 将对应于 LOOP: goto LOOP; 或其他东西。当谈论这样一个过程时,我们可以说它是“底部”,因为它描述了一个非终止的计算过程。我认为现实生活中没有“底部”,因为我们(人们)总是可以(理论上)在任何给定时刻检查计算机的状态,无论它是否完成。或按重置按钮。 :)
  • 谢谢威尔!您对不存在从 P 到 O 的单射函数的评论确实有助于我理解过程和操作如何相互关联!
【解决方案2】:

数字算术运算原始数据过程

我的理解是,数字映射到原始数据,算术运算映射到过程。因此,操作就是过程。

在像(* 2 3) 这样的组合中,* 称为操作符,而23 称为操作数(参数)。运算符是一个过程。

后来他们引入了条件(condif),但从不将它们称为操作。

【讨论】:

  • 那么运算是内置在(预定义的)算术过程中的吗?
  • 不完全。操作是程序。算术只是一个形容词,所以它缩小了范围。因此,并不是所有的操作都是算术的,那些不是算术的也不能是算术过程,但它们仍然是过程。他们还使用术语复合操作和复合过程,表示两者都可以是用户定义的预定义。我认为他们将用户操作作为程序的同义词只是为了增加理解,这可能会适得其反。
猜你喜欢
  • 2012-08-19
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2023-03-17
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多