나는 혀짤배기 숙제가있다. 힘들어한다.Lisp 함수 : 공용어
공용 작업을 수행하는 함수를 작성해야합니다. 이 함수는 두 개의 입력을 원자 또는 목록의 형태로 사용하고 모든 요소를 결합하여 순서를 유지하고 모든 수준의 괄호를 제거합니다.
함수의 출력은 :
(my-union 'a 'b) ;; (a b)
(my-union 'a '(b)) ;; (a b)
(my-union '(a b) '(b c)) ;; (a b c)
(my-union '(((a))) '(b(c((d e))a))) ;; (a b c d e)
나는 LISP 상당히 새로운입니다. 여기 는 내가 지금까지 쓴 무엇이며, 그것은 단지 세 번째 예를 들어 작동합니다
(defun new-union (a b)
(if (not b)
a
(if (member (car b) a)
(new-union a (cdr b))
(new-union (append a (list (car b))) (cdr b)))))
어떤 도움을 주시면 감사하겠습니다!
나는 처음에는 바퀴를 재발 명하고 언어에 대한 느낌을 얻으려고 생각한다. 진정한 이해 없이는 이름과 인터페이스를 열심히 배워 가려고 노력하는 대신 표준 기능을 인식합니다. 표준 기능 사용은 나중에 제공됩니다. 모든 조각이 나에게 검은 상자와 같고 검은 마법으로 작업을하면 정확한 지그 소 퍼즐을 형성하기가 어렵습니다.:) –
윌, reinventing 바퀴 좋은 운동을하고 그 자리가 있습니다. 그러나 Lisp 또는 유사한 언어로 시작하여 중요한 재사용은 재사용 가능하고 구성 가능하며 일반적인 기능이 있다는 것을 배우는 것과 같은 상위 수준의 사고입니다. 내 답변의 요점은 '중복 제거'뿐 아니라 문제에 대한 해결책을 간단한 구성 요소의 조합으로 표현할 수 있다는 것입니다. 물론,'remove-duplicates'를 다시 구현하거나보다 성능있는 해결책을 찾으러 갈 수도 있지만, 재 구현이 항상 사용되어야한다고 생각하지는 않습니다. – danlei
고마워요! 정말 좋은 책을 추천 해 주실 래요? – user1561949