2014-11-05 2 views
-1

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

1) delete element for the top-level of a list

2) delete element for a nested list no matter how deep the list is.

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

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

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

+0

Согласно этому описанию, вы должны удалить второй элемент верхнего уровня, независимо от того, что это, если не существует менее двух элементов, в этом случае результат '() '. Нет необходимости возвращаться. – molbdnilo

ответ

1

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

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

(define (remove-2nd lst) 
    (if (or (null? <??>) 
      (null? <??>)) 
     <??> 
     (cons <??> <??>))) 
+0

не второй элемент, а второй уровень, например: удалить второй элемент '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) должен содержать – Jie

+0

@jyuan. В заявлении о проблеме говорится «второй элемент верхнего уровня», а не «элемент со второго уровня». – molbdnilo

+0

@jyuan Как я вижу, мой ответ соответствует вашему вопросу. Если вам нужно то, что вы написали в комментарии, вам нужно отредактировать свой вопрос в соответствии с этим. – Sylwester

Смежные вопросы