1

有没有人成功地使用 MIT-scheme 让画线工作?

https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-ZH-15.html#%_sec_2.2.4

4

5 回答 5

5

关键词是:

例如,假设我们有一个过程 draw-line 在屏幕上的两个指定点之间绘制一条线。

换句话说,没有 draw-line——这纯粹是假设的。

于 2011-03-28T23:59:47.490 回答
2

我使用scmutils了由 Gerald Sussman 提供的。这是他的经典力学课程中使用的数值和代数包,并且对绘图具有低级支持。

假设您已经定义make-vect并且make-seg

(define line (make-seg (make-vect 2 3) (make-vect 4 1)))

(define win1 (frame -5 5 -5 5))

(define (draw-line frame a b)
  (plot-line frame (xcor a) (ycor a) (xcor b) (ycor b))
)

这是我实现图片语言后得到的

乔治的平方极限

于 2021-01-11T09:00:34.373 回答
1

本书的那部分( SICP 第 2.2.4 节)的作者为图片语言制作了一个实际的 MIT 计划包。但是,该软件包是在 1993 年编写的,我没有任何运气让它在我的 Mac OS High Sierra 上运行。

但是,其他人专门为本书的该部分制作了一个更新的包,其中包括所有功能,包括画线,您实际上可以制作图片并玩弄它们。下载球拍,然后运行以下命令:

(require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))  

有关更多信息,请参阅这个非常棒的软件包的用户手册

于 2018-07-11T06:57:03.877 回答
0

在阅读本书的这一部分时,我决定draw-line生成可以在 HTML 画布上绘制的 JavaScript 代码。

(define (draw-line v1 v2)
  (newline)
  (display "ctx.beginPath();")
  (display (string-append "ctx.moveTo(" (number->string (xcor-vect v1)) "," (number->string (ycor-vect v1)) ");"))
  (display (string-append "ctx.lineTo(" (number->string (xcor-vect v2)) "," (number->string (ycor-vect v2)) ");"))
  (display "ctx.stroke();"))

毕竟draw-line,对于使用它的程序来说,究竟如何实现并不重要,我们只需要一种可视化结果的方法。唯一的缺点是 HTML 画布坐标从左上角开始,而不是从左下角开始,但这也可以通过稍微调整生成的代码来处理。

这是完整的方案代码https://github.com/antivanov/scip-exercises/blob/master/scheme/ch2/2.48.49.scm https://github.com/antivanov/scip-exercises/blob/master /scheme/ch2/2.52.scm

遵循相同的方法,我能够可视化本章中的其他示例/练习。

于 2019-05-05T13:32:45.050 回答
-1

我为我的一门课完成了这项画家作业。对于 2.47,你真的不需要担心画线。您需要做的就是制作构造函数和选择器:

(define (make-frame origin edge1 edge2)
(list origin edge1 edge2))

(define (origin-frame frame)
(car frame))

(define (edge1-frame frame)
(cadr frame))

(define (edge2-frame frame)
(caddr frame))
于 2011-03-29T00:28:48.060 回答