list - 方案:定义一个递归谓词 u-even?获取一个列表,如果列表中的项目数为偶数,则返回#t

标签 list recursion scheme

这是我上周进行的测试中的一个问题,如果不转换为十进制,我不知道该怎么做。

定义递归谓词 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/

相关文章:

javascript - 如何避免/防止 Node.js 中的无限递归调用?

java - 了解将数组切片为子数组的递归调用

python - 递归函数不递归

functional-programming - 如何消除方案中此函数的可变性(N 皇后)

python - 打印没有转义字符的 unicode 字符列表

python - 检查字符串是否包含列表中的任何单词的最快方法

scheme - 为什么 + 和 * 分别计算为 0 和 1?

list - 如何根据基数从数字列表中配对?

c# - 从列表中返回元组计数

python - 在 Python 中将列表转换为集合!我究竟做错了什么?