标签: sicp

SICP练习1.3请求评论

我正在尝试通过SICP学习计划.练习1.3内容如下:定义一个过程,该过程将三个数字作为参数,并返回两个较大数字的平方和.请评论我如何改进我的解决方案.

(define (big x y)
    (if (> x y) x y))

(define (p a b c)
    (cond ((> a b) (+ (square a) (square (big b c))))
          (else (+ (square b) (square (big a c))))))
Run Code Online (Sandbox Code Playgroud)

scheme sicp

22
推荐指数
8
解决办法
4432
查看次数

"数据只是愚蠢的代码,代码只是智能数据"是什么意思?

我刚刚在计算机程序的结构和解释中遇到了一个想法:

数据只是愚蠢的代码,而代码只是智能数据

我不明白这意味着什么.有人可以帮助我更好地理解它吗?

terminology sicp

22
推荐指数
2
解决办法
1956
查看次数

对Miller-Rabin感到困惑

作为我自己的练习,我正在实施Miller-Rabin测试.(通过SICP工作).我理解费马的小定理并且能够成功地实现它.我在米勒 - 拉宾测试中被绊倒的部分是这个"1 mod n"业务.是不是1 mod n(n是一些随机整数)总是1?所以我很困惑"1模数n的非平方根"可能是什么,因为在我看来"1 mod n"在处理整数值时总是1.我错过了什么?

algorithm primes sicp prime-factoring primality-test

19
推荐指数
3
解决办法
3301
查看次数

算术与教会数字

我正在通过SICP工作,问题2.6让我陷入了困境.在处理教会数字时,将零和1编码为满足某些公理的任意函数的概念似乎是有意义的.另外,使用零的定义导出单个数字的直接公式,并且add-1函数是有意义的.我不明白如何形成一个加号运算符.

到目前为止,我有这个.

(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

(define one (lambda (f) (lambda (x) (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))
Run Code Online (Sandbox Code Playgroud)

通过wikipedia条目查看lambda演算,我发现plus的定义是PLUS:=λmnfx.mf(nfx).使用该定义,我能够制定以下程序.

(define (plus n m)
  (lambda (f) (lambda (x) ((m f) ((n f) x)))))
Run Code Online (Sandbox Code Playgroud)

我不明白的是,如何仅使用先前派生的程序给出的信息直接导出该过程.任何人都可以用某种严格的证明形式回答这个问题吗?直觉上,我想我明白发生了什么,但正如Richard Feynman曾经说过的那样,"如果我不能建造它,我就无法理解......"

scheme lambda-calculus sicp church-encoding

18
推荐指数
1
解决办法
2999
查看次数

SICP还在推荐吗?

我有一些python的经验,我要求一种新的语言,并说我很难实现我学到的东西.他们建议我学习SICP.说它使用一种优秀的语言,并教授优秀的编程基础知识.

但我注意到它是在1984年出版的.你们推荐它们,还是我被拖了?:p

谢谢.

scheme sicp

18
推荐指数
4
解决办法
3816
查看次数

Scheme:返回另一个内部过程的过程

这是来自SICP的书,我相信很多人都熟悉这本书.这是本书的早期例子,但我觉得这是一个非常重要的概念,我无法理解.这里是:

(define (cons x y)
 (define (dispatch m)
   (cond ((= m 0) x)
         ((= m 1) y)
         (else (error "Argument not 0 or 1 - CONS" m))))
 dispatch)
(define (car z) (z 0))
(define (cdr z) (z 1))
Run Code Online (Sandbox Code Playgroud)

所以在这里我理解car并且cdr正在定义范围内cons,并且我得到它们分别将一些参数映射z到1和0(参数z是一些cons).但是我说我打电话(cons 3 4)......当我们立即进入这个内部过程dispatch并且m我们还没有指定一些参数时,如何评估参数3和4 ?而且,更重要的是,返回的重点是dispatch什么?我根本没有真正得到那个部分.任何帮助表示赞赏,谢谢!

lisp scheme functional-programming sicp

18
推荐指数
3
解决办法
4000
查看次数

如何让Emacs内部的方案解释器工作?

我正在经历SICP,我希望有一个类似于交互式Python解释器的翻译,在我看课和阅读本书时可以玩.此外,我希望这个解释器在Emacs中运行,这样我就可以在方案代码和交互式解释器等文件之间来回切换.

但是,我对Emacs相当新,并且还没有能够让它工作或者找到一套明确的指令来使它工作.

似乎我应该能够设置它以便M-x run-scheme打开一个至少听起来就像我想要的交互式解释器,但此刻这只是返回Searching for program: no such file or directory, scheme而且我无法弄清楚究竟是什么文件我需要在哪里解决这个问题.

我正在GNU Emacs 22.1.1 (mac-apple-darwin, Carbon Version 1.6.0)通过OS X 10.5安装DVD安装.

macos emacs scheme interpreter sicp

16
推荐指数
3
解决办法
9329
查看次数

急切评估/应用订单和懒惰评估/正常订单

据我所知,急切评估/应用顺序在应用之前评估函数的所有参数,另一方面,惰性评估/正常顺序仅在需要时评估参数.

那么,热切评估应用顺序,懒惰评估正常秩序这两个术语之间有什么区别?

谢谢.

evaluation programming-languages sicp

15
推荐指数
2
解决办法
4247
查看次数

在SICP中使用lambda进行cons/car/cdr定义

当我在SICP中遇到以下'替代'定义的缺点和汽车时,我才开始觉得我对球拍和方案中lambda的使用有一个模糊的理解

(define (cons x y)
   (lambda (m) (m x y)))

(define (car z)
  (z (lambda (p q) p)))

(define (cdr z)
  (z (lambda (p q) q)))
Run Code Online (Sandbox Code Playgroud)

对于我的生活,我无法解析它们.

任何人都能解释如何以对全新手有意义的方式解析或扩展这些吗?

lambda scheme sicp racket

14
推荐指数
1
解决办法
4086
查看次数

如何在SICP,Scheme,Exercise 2.78等中获取函数

我试图在SICP中进行2.78运动,但是函数put和get是未知的.我尝试了多种语言,如相当大,球拍,r5rs,mit-scheme,mzscheme等.我甚至下载了SICP支持(http://www.neilvandyke.org/sicp-plt/),但无济于事.我怎样才能使这些功能起作用?

scheme sicp

13
推荐指数
3
解决办法
2783
查看次数