2014-10-13 4 views
0

두 개의 인수, 즉 목록 A의 첫 번째 수준에있는 모든 원자 A의 모든 항목이 제거 된 새 목록을 반환하는 목록 L을 반환하는 재귀 함수 DELETE를 정의하십시오. .목록의 첫 번째 레벨에서 요소 삭제

예 : (Delete ‘a ‘(m a (m a))) return (m (m a)).

+0

이것은 질문보다는 숙제 연습과 비슷합니다. 특정 문제가 있습니까? – molbdnilo

+2

제목이 설명과 일치하지 않습니다. 문제가있을 경우 직접 시도하고 코드로 다시보고해야합니다. – uselpa

답변

0

본문에 명시된 질문에 답할 것입니다.이 제목은 귀하가 제목에 쓴 것과 약간 더 어려우며 다른 내용입니다. 가장 쉬운 해결책은 기본 제공 절차 중 하나를 사용하는 것입니다. 예를 들어 통역사가 remove*을 제공하면 트릭을 수행합니다. 휠을 다시 작성하지 않는 것이 좋습니다.

(remove* '(a) '(m a (m a) a)) 
=> '(m (m a)) 

하지만 처음부터 다시 구현하고 싶습니다. 이 솔루션은 입력 목록을 탐색하고 출력 목록을 반환하기위한 표준 템플릿을 엄격하게 준수합니다. 나는 당신에게 몇 가지 힌트를 줄 것이지만, 나는 당신 자신의 대답을 찾는 즐거움을 망칠 생각이 없다. 강제의 공백 : 보조 노트로

(delete 'a '(m a (m a) a)) 
=> '(m (m a)) 

, 쉽게해야합니다 제목에 질문에 대답하기 위해 코드를 적응 : 즉시 첫째로 예상대로

(define (delete ele lst) 
    (cond (<???>      ; if the list is empty 
     <???>)      ; then return the empty list 
     (<???>      ; is current element equal to `ele`? 
     (delete ele <???>))   ; then skip it and advance recursion 
     (else       ; otherwise 
     (cons <???>     ; `cons` current element 
       (delete ele <???>))))) ; and also advance recursion 

의미가 있습니다 요소가 발견되면 건너 뛰고 나머지 목록을 반환하므로 더 이상 재귀를 진행할 필요가 없습니다. 독자를위한 운동으로 남았습니다.

+0

예, 작동 중입니다. 감사합니다. :) – Dumi

관련 문제