我的函数检查简单的值并且应该根据结果输出/返回。我有两个问题:
1. 当我用表达式 (randint (-5 10))
替换 runner 的 let 值 (-1) 时,其中 randint
是另一个返回随机数的过程在 -5 到 10 之间,它不起作用
- 如果前两个 if 语句为真,我想返回/打印一个字符串,不知道如何在方案中执行此操作。
代码如下:
(define (check)
(let (runner(randint -5 10)
(cond ((and (< runner 1) (> runner -3))
(display "yes"))
((and (< runner -2) (> runner -6))
(display "no"))
((> runner 0)
(display runner))))))
这里是 randint 的代码:
(define random
(let ((a 69069) (c 1) (m (expt 2 32)) (seed 19380110))
(lambda new-seed
(if (pair? new-seed)
(set! seed (car new-seed))
(set! seed (modulo (+ (* seed a) c) m)))
(/ seed m))))
(define (randint . args)
(cond ((= (length args) 1)
(floor (* (random) (car args))))
((= (length args) 2)
(+ (car args) (floor (* (random) (- (cadr args) (car args))))))
(else (error 'randint "usage: (randint [lo] hi)"))))
最佳答案
除了@Rptx 指出的语法问题之外,您的代码中还有一个 fatal error :您不能在 Racket 中使用单臂 if
(意思是:它们必须 有一个结果和一个选择)。您可以嵌套它们,或者更好:使用 cond
,它非常适合测试多个条件。这应该有效:
(define (check)
(let ((runner (randint -5 10)))
(cond ((and (< runner 1) (> runner -3))
"yes")
((and (< runner -2) (> runner -6))
"no")
((> runner 0)
runner))))
像这样使用它:
(display (check))
关于 randint
的问题:既然您已经发布了代码,我可以确认问题出在您传递参数的方式上。如上图,这是正确的做法:
(randint -5 10)
关于scheme - 让错误并为方案过程返回/打印 "string",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171202/