作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写自己的“列表?”计划中的谓词。我知道列表的定义: 1. en 空列表 2. pair,其 cdr 是一对
我知道我的代码是错误的,因为它在每一对上都返回真值,但每一对都不是列表。我不知道如何实现列表的 cdr 也必须是一对的条件。
(define (my-list? x)
(if (equal? x ()) #t
(pair? x)))
最佳答案
list?
过程检查列表是否为 proper (嵌套的 cons-cells 以 null
值结尾),因此我们必须考虑三种情况:
(define (my-list? x)
(cond ((null? x) #t) ; empty list
((pair? x) (my-list? (cdr x))) ; pair, advance recursion
(else #f))) ; atom
null
值被认为是一个空列表。如果我们是一对,那么我们通过递归调用过程来推进它的 cdr
。如果它不是 null
也不是一对,那么它就是一个原子。这将涵盖边缘情况,例如:
(my-list? 42)
=> #f
(my-list? (cons 1 2))
=> #f
并且将为正确的列表返回 true
:
(my-list? '())
=> #t
(my-list? (cons 1 (cons 2 '())))
=> #t
关于list - 如何在 Scheme 中编写自己的 "list?"程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54493220/
我是一名优秀的程序员,十分优秀!