Схема: сравнить размеры списка - PullRequest
0 голосов
/ 15 апреля 2011

У меня проблема с моей программой Scheme.Я пытаюсь взять 2 списка, сравнить их размеры и вернуть true, если размеры равны, и false, если они не совпадают.Значение каждого атома не имеет значения.

Пример:

(structeq '(a (b(c))) '(1(2(3)))) => #t
(structeq '(x) '(()) => #f

Вот мой код:

(define (structeq list1 list2)
    (cond ((null? list1) list2)
    (eq? (length list1) (length list2))))

(structeq '(a b c d) '(a b c))

Однако, это возвращает размер последнегосписок.Где я иду не так?

РЕДАКТИРОВАТЬ: отменить этот вопрос.Я понял это, мне просто нужно было удалить оператор cond.

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

обратите внимание, что:

(define (same-length a b)
  (if (and (null? a) (null? b)) #t
      (if (or (null? a) (null? b)) #f
          (same-length (cdr a) (cdr b)))))

остановится, как только найдет конец более короткого списка.

0 голосов
/ 28 июля 2013
(eq? (length list1) (length list2)))) 

Эта строка в вашем коде имеет предикат, но не имеет следствия. Если они равны, вы хотите вернуть # т.
Также было бы хорошо добавить еще один случай, чтобы поймать, когда длина списков не равны. например: (иначе #f)

Подробнее об условных обозначениях здесь .

...