use*_*546 4 scheme if-statement racket
我一直在DrRacket工作,试图创建一个"前缀"功能(#lang球拍).它应该将两个列表作为输入,#t如果pf为null或者等于开头,则应输出ls.
我的问题是,当我的代码pf不是前缀ls而且ls不是null 时,它似乎根本不返回任何内容.如果我用#fif语句替换if语句,比如'(),它将正确地返回,但如果我尝试捕获'()并基于它而给出输出,它会给出没有意义的结果(比如说是'()不是't null,或者'()不相等'()).它似乎与在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)])
))
Run Code Online (Sandbox Code Playgroud)
在条件if范围内cond通常是做错事的标志.我想你的意思是:
(define prefix
(lambda (pf ls)
(cond
[(null? pf) #t]
[(null? ls) #f]
[(equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls))]
[else #f])))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4188 次 |
| 最近记录: |