scheme - 比较两个列表在方案中是否相同
问题描述
如果 #\tab 之前或 #\space 之前的列表相同,我想比较两个列表返回 true。不一样返回false。这是我尝试做的努力..我尝试使用递归来解决问题,但我不知道我错在哪里..(我不允许使用 equal?我只能使用 char=?)我的代码总是返回假
(same? '(#\H #\e #\l #\l #\o #\tab #\W #\o #\r #\l #\d)
'(#\H #\e #\l #\l #\o))
=> #t
(same? '(#\H #\e #\l #\l #\o #\space #\W #\o #\r #\l #\d)
'(#\W #\o #\r #\l #\d))
=> #f
(define same?
(lambda (L1 L2)
(cond
((char=? (car L1) (car L2)) (same? (cdr L1) (cdr L2) ))
((char=? #\space (car L1)) #t)
((char=? #\tab (car L1)) #t)
((char=? #\newline (car L1)) #t)
(else #f)
)))
解决方案
;; Character -> Boolean
;; is char either #\space, #\tab, or #\newline?
(define (space? char)
(or (char=? char #\space)
(char=? char #\tab)
(char=? char #\newline)))
考虑same?
函数的所有这些情况:
- 两者都是
L1
_L2
null
L1
是null
并且(car L2)
满足space?
- 既满足
(car L1)
又(car L2)
满足space?
(car L1)
满足space?
并且L2
是null
- 当两者
L1
和L2
既不是null
也不是(car L1)
和时会发生什么(car L2)
spaces
?您只需将它们进行比较。如果它们相同 - 重复。如果他们不是 - 返回#false
首先提出具体示例通常会导致这样的模板,从那里完成功能会更容易。然后看看能不能简化。
推荐阅读
- reactjs - 在打字稿中设置反应类组件状态的默认值
- java - 将 Spring Cloud 版本从 Edgware 升级到 Hoxton
- python - 使用 for 循环打印名称
- rust - 为什么弧
> 需要 T:同步 + 发送? - macos - 如何在 mac 上安装 clang 11
- functional-programming - 无法在 agda 中安装默认库
- python - 将列从对象转换为浮点数时出现值错误
- python - 打包一个包含 .so 库的 python 项目
- excel - 在 Excel 中单击切片器中的选项之一时自动运行宏
- python - 在 python 中使用 group by 和排序后如何在数据框中获得前 3 名的销售额?