scheme - 方案程序
问题描述
我正在尝试创建一个 Scheme 函数。
我创建了这段代码,但我不断收到错误:
(define (slope-of-line p1 p2)
(let ((m (/ (- (cdr p2) (cdr p1))
(- (car p2) (car p1))))
(b (- (cdr p1)
(* m (car p1)))))
(lambda (x) (+ (* m x) b))))
谢谢!
解决方案
看起来不错,但我注意到您正试图m
在 binding 的表达式中使用b
。在那个表达式m
不存在的时候。如果您想知道为什么可以将 let 转换为匿名函数调用,它是语法糖:
((lambda (m b)
(lambda (x) (+ (* m x) b)))
(/ (- (cdr p2) (cdr p1)) (- (car p2) (car p1)))
(- (cdr p1) (* m (car p1))))
在这里,您可以清楚地看到它m
在定义它的 lambda 之外使用。您的代码可以通过替换来let
修复let*
。
(define (slope-of-line p1 p2)
(let* ((m (/ (- (cdr p2) (cdr p1))
(- (car p2) (car p1))))
(b (- (cdr p1)
(* m (car p1)))))
(lambda (x) (+ (* m x) b))))
(define slope (slope-of-line '(1 . 3) '(6 . 4)))
(slope 20) ; ==> 34/5 (which is close to ~6,8)
之所以可行,是因为let*
它只是嵌套的语法糖let
:
(let* ((a a-expression)
(b b-expression))
body ...)
是相同的:
(let ((a a-expression))
(let ((b b-expression))
body ...))
推荐阅读
- symfony - 创建 symfony 的 Doctrine 数据库
- union - BOOL 和 WORD 的联合位映射
- ios - 尝试在颤振中使用 share_plus 包共享图片时,如何修复 Facebook ios 共享对话框崩溃?
- python - Tkinter 在运行 exe 版本的应用程序时导致黑页
- java - 无法将 maven lib 部署到 maven Central
- python - 是否可以将多个 matplotlib.pyplots 绘制到一个图中,以便它们都在 python 中重叠?
- python - Django Python 当前登录用户
- facebook - Facebook 的共享调试器中的“获取的 URL”和“规范的 URL”有什么区别?
- java - 在 android-Java 代码中使用 Google ASR 时,一旦提示可见,它就会一直显示“再试一次”,没有机会说话
- xamarin.forms - 通过动态列出问题和动态“输入类型”来创建“向导”UI