Scheme 为什么可以';在这个函数中,我是否返回false,但我可以返回true?(球拍)
目标是检查非负数的数字是否按递增顺序排列 这是我的密码:Scheme 为什么可以';在这个函数中,我是否返回false,但我可以返回true?(球拍),scheme,racket,Scheme,Racket,目标是检查非负数的数字是否按递增顺序排列 这是我的密码: (define (in-order-iter num) (define (aux num-left result-so-far) (cond ((equal? result-so-far #f) #f) ((< num-left 10) result-so-far) ((aux (quotient num-left 10) (< (modulo (quotient num-l
(define (in-order-iter num)
(define (aux num-left result-so-far)
(cond ((equal? result-so-far #f) #f)
((< num-left 10) result-so-far)
((aux (quotient num-left 10) (< (modulo (quotient num-left 10) 10)(modulo num-left 10))))))
(aux num #t))
(in-order-iter 321)
仅此一项,它就返回#f
,因此到目前为止它应该将结果更改为#f
为什么这会发生在我身上
编辑:顺便说一下,我可以递归地执行此函数,它可以工作:
(define (in-order-recur num)
(if (> num 10)
(if (< (modulo (quotient num 10) 10) (modulo num 10))
(in-order-recur (quotient num 10))
#f)
#t))
(in-order-recur 100000)
(定义(按重复次数的顺序)
(如果(>num 10)
(如果(<(模(商数10)10)(模数10))
(为了重现(商数10))
#(f)
#t) )
(为了重复10万次)
您应该使用else
子句作为最后一个条件
术语:
(define (in-order-iter num)
(define (aux num-left result-so-far)
(cond ((equal? result-so-far #f) #f)
((< num-left 10) result-so-far)
(else (aux (quotient num-left 10)
(< (modulo (quotient num-left 10) 10)
(modulo num-left 10))))))
(aux num #t))
依赖于作为值返回的内容,例如MIT Scheme返回一些有用的值,会将您锁定在特定的方言中,并且不可移植
如果基本情况下的值为true,那么默认情况将为#t
。然后,由于术语没有结果部分,#t
是返回值。谢谢!!我花了一分钟的时间才意识到这一点,但现在这很有意义。我想用我自己的话来总结一下:因此,如果表达式返回false,它将作为一个结果转到另一个语句——然而,由于没有其他语句存在,它返回void。但是,return#t没有任何后果,因为没有其他子句可返回。非常感谢。
(define (in-order-iter num)
(define (aux num-left result-so-far)
(cond ((equal? result-so-far #f) #f)
((< num-left 10) result-so-far)
(else (aux (quotient num-left 10)
(< (modulo (quotient num-left 10) 10)
(modulo num-left 10))))))
(aux num #t))
(define (in-order-iter num)
(define (aux num-left result-so-far)
(cond ((equal? result-so-far #f) #f)
((< num-left 10) result-so-far)
((aux (quotient num-left 10)
(< (modulo (quotient num-left 10) 10)
(modulo num-left 10))))
(else "BaNaNa")))
(aux num #t))