【问题标题】:How to debug "List contains heterogenous data types" in Racket?如何在 Racket 中调试“列表包含异构数据类型”?
【发布时间】:2017-12-14 18:50:29
【问题描述】:

这是我的球拍问题:

定义一个将列表作为参数的函数。它应该返回一个布尔值(即#t 或#f),指示列表是否按升序排序。你可能不会使用内置的排序?功能。您的实现必须是递归的。

输入:同质数据类型的元素列表,数字或字符串。

输出: 一个布尔值,指示列表的元素是否严格按升序排序。如果列表包含异构数据类型,则抛出错误(使用错误函数)并显示消息“错误:列表包含异构数据类型”。

所以当我输入这个函数时必须给我这个错误

(my-sorted? '(7 "垃圾邮件" 9)) !错误:列表包含异构数据类型

但对我来说它给了我这个

(my-sorted? '(7 "垃圾邮件" 9)) : 合同违约 预期:真实? 给定:“垃圾邮件” 论点位置:第二 其他论点...:

这里有什么

(define (my-sorted-int? lst)
  (define size (length lst))
  (if (< size 2)
      #t
      (if (null? lst)
          #t
          (if (> (car lst) (car (rest lst)))  <======= Gave me Error
              #f
              (my-sorted-int? (rest lst) )))))

(define (my-sorted-string? lst)
  (define size (length lst))
  (if (< size 2)
      #t
      (if (null? lst)
          #t
          (if (string>? (car lst) (car (rest lst)))
              #f
              (my-sorted-string? (rest lst) )))))

(define (my-sorted? lst)
  (if (string? (car lst))
      (my-sorted-string? lst)
      (my-sorted-int? lst)))

【问题讨论】:

  • 显示你目前拥有的东西。
  • 我发布了我所拥有的,非常感谢
  • 你可以在 my-sorted-int 中插入一个? that (car (rest last)) 是一个整数 - 如果不是则显示错误。
  • 你现在可以检查我的代码,当我输入我的代码时会显示错误
  • 因为 > 需要两个整数,并且 (car (rest last)) 可能是您需要在之前插入支票的字符串。

标签: racket


【解决方案1】:

所以您知道左侧是一个数字,因为它是您最初检查的值,但右侧也需要是一个数字才能对其执行&gt;。因此你需要这样的东西:

(if (number? (cadr lst))
    (if (> (car lst) (cadr lst)) ...)
    (error "ERROR: List contains heterogenous data types"))

您可能希望使用cond 来获得更扁平的结构。此外,您已经制作了两个相同的过程来处理整数和字符串,而您可以只制作一个并传递不同的东西以使您的代码更加干燥:

(define (my-sorted? lst)
  (define (my-helper? correct-type? greater-than?)
    (let loop ((e (car lst))
               (lst (cdr lst)))
      (cond ((null? lst) #t)
            ((not (correct-type? (car lst)))
             (error "ERROR: List contains heterogenous data types"))
            ((greater-than? e (car lst)) #f)
            (else (loop (car lst) (cdr lst))))))

  (cond ((null? lst) #t)
        ((string? (car lst)) (my-helper? string? string>?))
        (else (my-helper? number? >))))

【讨论】:

  • 我真的非常感谢你,现在我知道我的错误并感谢你向我解释清楚
猜你喜欢
  • 2013-03-25
  • 2022-09-24
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 2012-12-20
  • 2018-12-01
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多