2014-04-25 2 views
-2

나는 lisp 언어를 처음 사용한다. 단지 3 일 만에. 나는 과제를 가지고 있으며 코드를 작성하는 데 도움이 필요합니다.Common Lisp Programming

3 개의 인수, 즉 aList라는 정수 목록, min이라는 정수 및 max라는 정수를 사용하는 Lisp 함수를 작성하십시오. 이 함수는 aList에서 최소 범위= x < = max 범위의 요소 수를 반환합니다. 여기서 x는 aList의 요소입니다. aList가 비어 있으면 함수는 0을 반환해야합니다.

올바른 방법입니까?

(defun countem(aList min max) 
    (if (> min max) 
     (cons min (aList (add1 min) max)))) 
+0

당신은'x'와'y'를 말하고 있지만 그들은 존재하지 않습니다. 다른 곳에서 함수 본문을 복사하여 붙여 넣기 했습니까? –

+0

무엇을 의미합니까? 그걸 할 방법이 아닌가? – user3571154

+0

@ user3571154 REPL에서'(+ 1 1)'을 시도하십시오. –

답변

0
  1. < = X < 최소 범위에 빠지지 aList의 요소 수를 찾기 위해

참조 코드를 시도 REPL에 코드에서 sbcl

  • 종류를 설치하고 있습니다 = 최대 :

    (defun countem-1 (aList min max) 
         (let ((count 0)) 
         (dolist (el aList) 
          (if (and (>= el min) (<= el max)) 
           (setf count (1+ count)))) 
         (print count))) 
    

    또는 재귀 fashio n :

    (defvar count 0) 
    (defun countem-2 (aList min max) 
         (if (<= min max) 
          (progn 
          (setf count (1+ count)) 
          (countem-2 aList (1+ min) max)) 
          (print count)) 
    
  • +0

    대단히 감사합니다. – user3571154

    0

    이렇게하면 어떻게 될까요?

    (defun countem (aList min max) 
        (apply #'+ (mapcar (lambda (x) (if (<= min x max) 1 0)) aList))) 
    

    나는 목록에 대해 익명의 함수를 매핑하여 요소가 제약 조건을 충족시키는지를 나타내는 1과 0의 목록을 만듭니다.

    그런 다음 요약합니다.

    루핑이나 재귀가 필요하지 않습니다.