2014-06-19 6 views
-2

시험에서이 질문을했습니다. 어떻게 해결할 수 있습니까? 단점은 기본적인 공통적 인 Lisp 함수입니다. Common Lisp 환경이 작동하게하려면 어떤 기능을 제공해야합니까? 이 코드가 없으면이 코드는 어떻게됩니까?LISP - 병사 수당은 무엇이 필요합니까?

(defun는 시험 (N L1, L2) ((plusp의 N) (L1 L2를 추가) (뭔가 (1 N)의 L1, L2)))

> 프롬프트 (테스트 fourtytwo '(4) '(2))

+1

질문을 올바르게 재현 했습니까? 그것은 거의 이해가되지 않습니다. 코드에서 숫자를 제공해야한다는 것이 확실 할 때 첫 번째 인수로 기호 fourtytwo (unquoted!)를 전달하는 이유는 무엇입니까? – Mark

+1

또한 Lisp에서 목록 구조에 대한 정보를 찾으려고 했습니까? "common lisp cons"에 대한 Google 결과의 주요 행에는 다음 소스가 포함됩니다. [one] (http://www.lispworks.com/documentation/lw61/CLHS/Body/f_cons.htm) 및 [another one] (http : /www.gigamonkeys.com/book/they-called-it-lisp-for-a-reason-list-processing.html). 두 번째 링크는 주제에 대한 충분한 정보를 제공해야합니다. – Mark

+0

나는이 질문에 대한 예상 답변이 코스 중에 가르쳐지는 "기능"의 개념에 달려 있다고 생각한다. – molbdnilo

답변

0

어느 관점에서?

언어 구현 자의 경우 포인터에 포함되지 않은 한 두 개의 포인터와 아마도 type 및 gc에 대한 플래그가 필요한 메모리와 데이터 유형이 필요합니다.

개발자의 경우 데이터를 보유하는 두 개의 인수가 필요합니다. 독자와 append 모두 사용하므로 단점이 없기 때문에 단점도없고 목록도 없습니다.

+0

"언어 구현 자의 경우 포인터에 포함되어 있지 않은 한 두 개의 포인터와 아마도 type 및 gc에 대한 플래그가 필요한 메모리와 데이터 유형이 필요합니다." 이는 구현 세부 사항에 너무 많은 것을 제안 할 수 있습니다. 사전 어법으로 충분하다. 예 : http://pastebin.com/3TX0Ny1S. 보장해야 할 것은''(car (cons 1 2)) => 1)''과'(cdr (cons 1 2)) => 2'입니다. –

+0

@JoshuaTaylor 환경 변수와 함께'cons'를 구현한다면 메모리와 포인터 요구 사항을 클로저 구현으로 옮깁니다. IMO의'단점'은 구현하기위한 폐쇄보다 훨씬 쉽습니다. 그것은'if'를 사용하여'cond'를 구현할 수있는 것과 비슷하지만, 그 중 하나는 작동 시키려면 원시적으로 구현해야합니다. – Sylwester