首页 > 解决方案 > 调试接受字符串的方案函数

问题描述

我正在研究一个使用两个单词并检查它们的长度是否相同的 Scheme 函数。如果它们是,它应该输出“相同的长度”,如果它们的长度不同,它应该用它们的长度指定更长和更短的字符串。所以我尝试了

 (define (strings x y)
      (if (= (string-length x)(string-length y))
          display "same length"
          (string-length x)(string-length y)))

但它说两个字符串长度是相同的长度,即使它们不是。如果我将括号显示为“相同长度”,它也只会打印 x 的字符串长度。我不确定如何修复它。

标签: scheme

解决方案


您格式化代码的方式与 IDE 的功能不一致。例如。将您的代码粘贴到 DrRacket 中并按下CTRL+i给我:

(define (strings x y)
  (if (not (= (strings-length x)(strings-length y))
           (display "same length")) ; this is second argument to not
      (if (> (strings-length x)(strings-length y))
          ((strings-length x)(strings-length y)))))

因此,第一次if调用not带有两个参数,因为您缺少行尾的结束语。您还缺少 else 子句,这样错误的测试就会将结果留给实现。

基本上你在这之后:

(if (= (string-length x) (string-length y))
    what-to-do-when-true
    what-to-do-when-false)

请注意,您不需要第二个if,因为您正在测试与第一个相反的内容,并且保证最终会出现在代码中what-to-do-when-false。另请注意,我已将其删除,not因此您只需切换顺序即可。如果您愿意,可以重新添加not,但不要忘记括号。


推荐阅读