首页 > 解决方案 > 在过程中定义一个变量

问题描述

我可以在过程中定义变量吗?在我看来,我只能在程序中定义另一个程序。我在 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))))

标签: schemelisp

解决方案


是的,当然可以。尤其

(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))))

推荐阅读