scheme - 让错误并为方案过程返回/打印 "string"

标签 scheme lisp racket

我的函数检查简单的值并且应该根据结果输出/返回。我有两个问题: 1. 当我用表达式 (randint (-5 10)) 替换 runner 的 let 值 (-1) 时,其中 randint 是另一个返回随机数的过程在 -5 到 10 之间,它不起作用

  1. 如果前两个 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/

相关文章:

scheme - 申请申请Scheme

list - 如何返回1到x之间的数字列表

lisp - Lisp 中的神经网络 - 建议

scheme - 在两个列表上运行的函数

scheme - 如何摆脱列表中的重复项,但保持顺序

function - 如何处理 Scheme 中未指定数量的参数?

graph - 在 Common Lisp 中表示有向无环图

lisp - 为什么 lisp 说这个函数是未定义的?

导入 Racket /GUI 时 Racket 卡在 sleep 状态

racket - 我怎样才能捕捉扩展的形式?