Схема: как удалить элемент только второго уровня списка?

я сделал с

1) удалить элемент верхнего уровня списка

2) удалить элемент для вложенного списка независимо от того, насколько глубок этот список.

Но как решить проблему ниже:

Напишите функцию Scheme, которая принимает список в качестве параметра и возвращает список, идентичный списку параметров, за исключением того, что второй элемент верхнего уровня удален. Если в данном списке нет двух элементов, функция должна вернуть ().

И в этом вопросе я не знаю, как запретить рекурсию на 3-й уровень и удалить только элемент на 2-м уровне списка ввода.


person Jie    schedule 05.11.2014    source источник
comment
В соответствии с этим описанием вы должны удалить второй элемент верхнего уровня независимо от того, что это такое, если только элементов не меньше двух, и в этом случае результатом будет (). Нет необходимости рекурсировать.   -  person molbdnilo    schedule 06.11.2014


Ответы (1)


Я так понимаю, у вас есть список (a b c d), где все символы могут быть любыми, даже подсписками. Ваш код должен уменьшить это значение до (a c d). Это правильно?

Вот подсказка:

(define (remove-2nd lst)
  (if (or (null? <??>)
          (null? <??>))
      <??>
      (cons <??> <??>)))
person Sylwester    schedule 06.11.2014
comment
не второй элемент, а второй уровень, например: удалить элемент второго уровня 2 из ввода (1 2 3 (2 3 4) (2 3 (2 4 5) 4 5 2) 3 4 2 2 2), и он должен вернуть (1 2 3 (3 4) (3 (2 4 5) 4 5) 3 4 2 2 2) должен удалить только 2 во вложенном списке второго уровня, все 2 в верхнем уровне или нижний уровень (сравните с 2) должен сохранять - person Jie; 06.11.2014
comment
@jyuan В вашем описании проблемы говорится, что второй элемент верхнего уровня, а не элемент второго уровня. - person molbdnilo; 06.11.2014
comment
@jyuan Насколько я понимаю, мой ответ соответствует твоему вопросу. Если вы хотите, чтобы вы написали в комментарии, вам нужно отредактировать свой вопрос, чтобы он соответствовал этому. - person Sylwester; 06.11.2014