functional-programming - 为什么这个函数应该返回 false 时返回 true?
问题描述
所以,我有这个辅助函数来检查列表和对列表之间是否存在自反关系。
(define helper
(lambda (L S)
(cond
((if (equal? L '()) #f ;; here, when L equals empty list, it should return #f, but somehow it returns #t even if L is '().
(if (equal? S (car (car L)))
(if (list-equal? (car L))#t
(helper (cdr L) S))
(helper (cdr L) S))))
)))
但是,即使列表是空列表,它检查 L 是否为空列表的部分也会返回 true,从而允许我的其他函数返回 true。我一直很难弄清楚为什么它返回 #t 而不是 #f 几个小时。请帮我弄清楚是什么导致了这种情况发生。哦,我正在使用 Dr.Racket 6.12 版。
编辑:更清楚地说,我希望函数在 L 为 '() 作为基本情况时返回#f,这样函数就不需要再进行递归了。
解决方案
你把if
表格放在cond
里面是多余的。cond
所以你的错误肯定是你对语法缺乏理解。记住cond
语法如下:
(cond (condition1 what-to-do-if-condition1-is-true)
(condition2 what-to-do-if-condition2-is-true)
( ... ... )
(else what-to-do-if-none-of-the-conditions-listed-above-evaluated-to-true))
所以我相应地形成了你的表达方式:
(define helper
(lambda (L S)
(cond ((equal? L '()) #f)
((and (equal? S (car (car L))) (list-equal? (car L))) #t)
(else (helper (cdr L) S)))))
由于您没有给出定义list-equal?
- 我无法运行此代码进行测试。
推荐阅读
- r - 将 ntile() 与 group_by() 与 dplyr 一起使用
- java - java外部函数调用saxon 9.9he xslt
- html - 背景颜色和悬停不适用于可滚动 HTML 表格中的粘性列。表格设计也不是跨浏览器一致的
- php - 无法在 Docker 中安装 MongoDB PHP 扩展
- angular - 边缘浏览器不播放上传的 WAV 音频文件
- javascript - firebase:日期对象方法返回错误的值
- php - Yii2 Kartik 文件输入问题
- go - Goroutine 概念:直接调用 vs 使用函数字面量调用
- react-native - 反应本机键盘应该只推送文本输入而不是整个屏幕
- c# - 测试资源管理器 (VS) 显示 '
'