【问题标题】:Scheme (Racket) if within cond returns nothing方案(球拍)如果在 cond 内不返回任何内容
【发布时间】:2012-09-10 21:02:55
【问题描述】:

我一直在 DrRacket 工作,试图创建一个“前缀”功能(#lang racket)。它应该接受两个列表作为输入,如果pf 为空或等于ls 的开头,则应该输出#t

我的问题是当pf 不是ls 的前缀并且ls 不为空时,我的代码似乎根本没有返回任何内容。如果我将 if 语句中的 #f 替换为其他内容,例如 '(),它将正确返回,但如果我尝试捕获 '() 并基于它给出输出,它会给出不正确的结果'没有意义(比如说'() 不为空,或者'() 不等于'())。它似乎与在 cond 语句中使用 if 语句有关。谁能告诉我它在做什么,或者为什么?是否有可能使这段代码正常工作,还是我需要以另一种方式重新编写它?

感谢您的帮助!

(define prefix
  (lambda (pf ls)
    (cond
      [(null? pf) #t]
      [(null? ls) #f]
      [(if (equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls)) #f)])
      ))

【问题讨论】:

    标签: if-statement scheme racket


    【解决方案1】:

    cond 条件中包含if 通常是做错事的标志。我想你的意思是这样说的:

    (define prefix
      (lambda (pf ls)
        (cond
          [(null? pf) #t]
          [(null? ls) #f]
          [(equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls))]
          [else #f])))
    

    【讨论】:

    • 嗯,这确实回答了我的问题并解决了问题,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2020-01-26
    相关资源
    最近更新 更多