我正在尝试在Racket中编写一个简单的程序,如果a
的值为> 1
则打印1,如果0
和{{a = 0
的值,则打印-1
1}}如果a < 0
。我写了以下但看起来它没有照顾第三个条件。实际上,我没有包括第三个条件,因此我不知道如何使用&#39; if&#39;来检查所有三个条件。条款。我们非常感谢您的指导。
我是Racket的新手。我的节目是:
#lang racket
(define a 3);
(if (> a 0)
0
1)
-1
提前致谢。
答案 0 :(得分:6)
您正在寻找的功能已在名称sgn下定义。
您的实施不起作用的原因是它不完整。你想要:
(if (= a 0)
0
(if (< a 0)
-1
1))
或者只是看起来更好看:
(cond
[(negative? n) -1]
[(positive? n) 1]
[else 0])
答案 1 :(得分:2)
所以你如何描述它有两个后果和一个选择。然后我会使用cond
:
(cond ((> a 0) 1)
((= a 0) 0)
(else -1)) ; if it's not greater or equal it has to be less than
对于cond每个术语,你可以预期所有前一个都是假的,因此不需要最后一个测试,因为如果它不大于或等于它必须小于0.这与写作完全相同:
(if (> a 0)
1
(if (= a 0)
0
-1))
主要区别在于cond
看起来稍微好一些。如果您需要begin
(副作用),那么使用cond
也会有所帮助,因为它具有隐式begin
:
(define seen
(let ((hash (make-hash)))
(lambda (x)
(cond ((hash-ref hash x #f) #t)
(else (hash-set! hash x #t) #f)))))
与if
相同:
(define seen
(let ((hash (make-hash)))
(lambda (x)
(if (hash-ref hash x #f)
#t
(begin
(hash-set! hash x #t)
#f)))))
它是一样的,但我觉得cond
获胜,因为它的压痕更少,更平坦。
答案 2 :(得分:0)
我是CS的初学者,但是我们从Racket开始,这就是我们要做到的。而且,我只是按照您在问题中所说的去说:“如果a的值> 1,则打印1;如果a的值= 0,则打印0;如果a <0,则为-1”。
(cond
[(> a 1) 1]
[(= a 0) 0]
[(< a 0) -1])
我可能只是纯粹按照班级标准来学习CS的学生添加的东西,当我们编写使用间隔的函数时,我们总是编写适当数量的check-expect以查看是否发生了意外情况。我注意到,当a> 1,a = 0且低于0的所有值= -1时,您会发生某些事情。因此,如果您写了a = 1,并且如果对其他非> 1、0 =或<0的内容输入“ else”,则返回-1。我不知道如果a = 1会发生什么,但我想我会把它丢掉以作充分的衡量。
如果您在上面写有cond的情况下放入a = 1,则只会返回“ cond:所有问题结果均为假”。.Oki,现在我完成了。