比较两个列表在方案中是否相同

问题描述 投票:0回答:2

我想比较两个列表,如果#\ tab之前或#\ space之前的列表是相同的返回true。不一样的回报是假的。这是我尝试的努力..我尝试使用递归来解决问题,但我不知道我错在哪里..(我不允许使用相同的?我只能使用char =?)我的代码总是返回假

(same? '(#\H #\e #\l #\l #\o #\tab #\W #\o #\r #\l #\d)
     '(#\H #\e #\l #\l #\o))
    => #t
    (same? '(#\H #\e #\l #\l #\o #\space #\W #\o #\r #\l #\d)
     '(#\W #\o #\r #\l #\d))
    => #f  





     (define same?
(lambda (L1 L2)
(cond
((char=? (car L1) (car L2)) (same? (cdr L1) (cdr L2) ))
((char=? #\space (car L1)) #t)
((char=? #\tab (car L1)) #t)
((char=? #\newline (car L1)) #t)
(else #f)
)))
scheme racket
2个回答
1
投票
;; Character -> Boolean
;; is char either #\space, #\tab, or #\newline?
(define (space? char)
  (or (char=? char #\space)
      (char=? char #\tab)
      (char=? char #\newline)))

考虑same?函数的所有这些情况:

  • L1L2都是null
  • L1null(car L2)满足space?
  • (car L1)(car L2)都满足space?
  • (car L1)满足space?L2null
  • L1L2既不是null也不是(car L1)(car L2) spaces时会发生什么?你只需比较它们。如果他们是相同的 - 复发。如果他们不是 - 返回#false

首先提出具体的例子通常会导致像这样的模板,从那里更容易完成功能。然后看看你是否可以简化。


-2
投票

我这样设定你的条件:

  1. 两个char列表必须有#\ space或#\ tab,否则失败。
  2. 比较#\ space或#\ tab之前的部分。

对?

#lang racket

(define (same? l1 l2)
  (let loop ([loop_l1 l1]
             [loop_l2 l2]
             [result #f])
    (if (and
         (not (null? loop_l1))
         (not (null? loop_l2)))
        (if
         (or
           (char=? (car loop_l1) #\tab)
           (char=? (car loop_l1) #\space)
           (char=? (car loop_l2) #\tab)
           (char=? (car loop_l2) #\space))
         result
         (if (char=? (car loop_l1) (car loop_l2))
             (loop (cdr loop_l1) (cdr loop_l2) #t)
             #f))
        #f)))

(same? 
 '(#\H #\e #\l #\l #\o #\tab #\W #\o #\r #\l #\d)
 '(#\H #\e #\l #\l #\o #\space))
;; #t

(same? 
 '(#\H #\e #\l #\l #\o #\tab #\W #\o #\r #\l #\d)
 '(#\H #\e #\l #\l #\o))
;; #f

(same? 
 '(#\H #\e #\l #\l #\o)
 '(#\H #\e #\l #\l #\o #\tab #\W #\o #\r #\l #\d))
;; #f

(same? 
 '(#\H #\e #\l #\l #\o)
 '(#\H #\e #\l #\l #\o))
;; #f

(same? 
 '(#\H #\e #\l #\l #\o #\tab #\W #\o #\r #\l #\d)
 '(#\H #\e #\l #\l))
;; #f
© www.soinside.com 2019 - 2024. All rights reserved.