方案功能元组检查
scheme function tuples check
好吧,我真的很不擅长方案,而且我一直卡在这个功能上(看它是一个非常简单的修复)。我正在尝试编写一个函数来判断列表输入是否是一个包(一个包是一个元组列表,其中元组中的第一个数字是值,第二个数字是基数,而且每个值都不应该重复并从小到大排序)。这就是我所拥有的...语法可能很糟糕...
(define (bag? qbag)
(cond ((null? qbag) #t)
(if(eqv? (pair? (car qbag)) #t)
(baghelp (cdr qbag) (car(car qbag))))
(else (#f))))
(define (baghelp qbag x)
(cond((null? qbag) #t)
(if(and(if (eqv? (pair? (car qbag)) #t))
(if (< x (car(car qbag)))))
(baghelp (cdr qbag) (car(car qbag)))
(else(#f)))))
示例输入输出:
(bag? '((0 1)))
#f
(bag? '())
#t
(bag? '10)
#f
(bag? '((5 2) (4 3)))
#f
(bag? '((5 2) (7 3)))
#t
(bag? '((5 1 0)))
#f
(bag? '((5 5) (5 2)))
#f
是的,你的语法很糟糕。你在 cond
中使用 if
的方式和 (#f)
这样的表达式让我觉得你到现在为止一直在避开 Scheme 文献......真的,读一本好的教程,那是必须的。
下面是我将如何编写此代码的示例(或多或少;我会排除 (car bag)
和 (caar bag)
的重复使用,但这样它对您来说可能更具可读性):
(define (bag? bag)
(and (list? bag) (bag-help bag '())))
(define (bag-help bag last-val)
(or (null? bag)
(and (list? (car bag))
(> (caar bag) 0)
(= 2 (length (car bag)))
(or (null? last-val) (< last-val (caar bag)))
(bag-help (cdr bag) (caar bag)))))
这通过了您的所有测试并具有您在评论中提到的其他限制条件。
好吧,我真的很不擅长方案,而且我一直卡在这个功能上(看它是一个非常简单的修复)。我正在尝试编写一个函数来判断列表输入是否是一个包(一个包是一个元组列表,其中元组中的第一个数字是值,第二个数字是基数,而且每个值都不应该重复并从小到大排序)。这就是我所拥有的...语法可能很糟糕...
(define (bag? qbag)
(cond ((null? qbag) #t)
(if(eqv? (pair? (car qbag)) #t)
(baghelp (cdr qbag) (car(car qbag))))
(else (#f))))
(define (baghelp qbag x)
(cond((null? qbag) #t)
(if(and(if (eqv? (pair? (car qbag)) #t))
(if (< x (car(car qbag)))))
(baghelp (cdr qbag) (car(car qbag)))
(else(#f)))))
示例输入输出:
(bag? '((0 1)))
#f
(bag? '())
#t
(bag? '10)
#f
(bag? '((5 2) (4 3)))
#f
(bag? '((5 2) (7 3)))
#t
(bag? '((5 1 0)))
#f
(bag? '((5 5) (5 2)))
#f
是的,你的语法很糟糕。你在 cond
中使用 if
的方式和 (#f)
这样的表达式让我觉得你到现在为止一直在避开 Scheme 文献......真的,读一本好的教程,那是必须的。
下面是我将如何编写此代码的示例(或多或少;我会排除 (car bag)
和 (caar bag)
的重复使用,但这样它对您来说可能更具可读性):
(define (bag? bag)
(and (list? bag) (bag-help bag '())))
(define (bag-help bag last-val)
(or (null? bag)
(and (list? (car bag))
(> (caar bag) 0)
(= 2 (length (car bag)))
(or (null? last-val) (< last-val (caar bag)))
(bag-help (cdr bag) (caar bag)))))
这通过了您的所有测试并具有您在评论中提到的其他限制条件。