scheme - 在过程中定义一个变量
问题描述
我可以在过程中定义变量吗?在我看来,我只能在程序中定义另一个程序。我在 SICP 做练习时提出了这个问题,这(rand)
不是我想要的,因为它会生成两个不同的随机数,而我想要在这两个位置上使用相同的数字。
(define (try x)
(define (rand) (+ 1 (random (- x 1))))
(= (rand) (expmod (rand) x x)))
我已经包含了expmod
下面的代码。
(define % remainder)
(define (square a) (* a a))
(define (even? a) (= (% a 2) 0) )
(define (expmod base pow mod)
(cond
((= pow 0)
1)
((even? pow)
(% (square (expmod base (/ pow 2) mod)) mod))
(else
(% (* base (expmod base (- pow 1) mod) ) mod))))
解决方案
是的,当然可以。尤其
(define (x ...) ...)
只是一个简写
(define x (lambda (...) ...))
所以你已经定义了一个变量: rand
,它的值是一个函数。
你可能想要的是:
(define (try x)
(define rand (+ 1 (random (- x 1)))
(= rand (expmod rand x x)))
这又与
(define (try x)
(let ([rand (+ 1 (random (- x 1)))])
(= rand (expmod rand x x))))
推荐阅读
- azure-devops - 如何在通过 DevOps 将 Power BI 报表发布到多个客户端时清除其中的数据
- r - Gsub 命令用逗号和空格 (", ") 替换所有空格,除了某些单词之后用 R
- visual-studio-code - 有没有办法在 *current* 集成终端中运行 VSCode 任务?
- reactjs - 如何使按钮中的图标居中?
- openshift - 如何检查 Openshift HAProxy 路由器设置超时值
- java - 从 IntelliJ 运行 JavaFX 应用程序
- css - 圆形边框中的悬停效果
- sympy - 带有符号刻度标签的绘图
- http - 大多数情况下第三方 API 响应数据未正确发送到客户端
- axios - 如何在对话流行编辑器中实现谷歌翻译器api