这是我上周进行的测试中的一个问题,如果不转换为十进制,我不知道该怎么做。
定义递归谓词 u-even?它接受一个表示一元非负整数的列表 ls,并当且仅当该数字为偶数时才返回 #t。请勿将列表转换为十进制或使用十进制系统。回想一下,ls 可能包含的唯一符号是“l”(单词“lion”的第一个字母)。
工作原理如下:
`~ (u-even? '(l l))
#t
~ (u-even? '(l l l))
#f
~ (u-even? '(l l l l))
#t
~ (u-even? '(l l l l l l l))
#f
~ (u-even? '())
#t`
`(define u-even?
(lambda (ls)
(cond
[(null? ls) #t]
[else ;;I JUST DON'T KNOW PLEASE GIVE ME A HINT AT LEAST. `
最佳答案
您熟悉even
的定义吗?
(define (even x)
(if (zero? x)
#t
(not (even (- x 1)))))
这是一个稍微快一点的版本,因为它不会在每次迭代中否定答案,这使得尾递归:
(define (even x)
(cond ((zero? x) #t)
((= x 1) #f)
(else (even (- x 2)))))
现在。将参数从数字更改为列表使您需要更改基本情况..例如。 (null? x)
而不是 (zero? x)
因为 '()
是偶数,就像 0
是。
你能猜出如何在不使用 length
的情况下检查单元素列表吗?
关于list - 方案:定义一个递归谓词 u-even?获取一个列表,如果列表中的项目数为偶数,则返回#t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22055932/