2009-12-25 2 views
2

함수를 포함하는 목록을 만드는 방법이 있습니까? 내가 뭘 하려는지, 일부 산술 연산자의 목록을 만들 수 있습니다 (+ - * /) 그래서 나는 쉽게 그들의 순서를 조작하고 숫자의 목록에 적용 할 수 있습니다. 내가 그 목록이있는 경우함수 목록

그래서,이처럼 사용하십시오 :

(apply (map (lambda (x) 
       x) 
      '(+ - * /)) 
     '(1 2 3 4)) 

을 나는 초보 프로그래머, 그래서 같은 작업을 할 수있는 더 좋은 방법이 있다면, 귀하의 조언이 많이 감사합니다 .

+0

Ammar : 손으로 확장하고 작성한 코드의 내용을 보여줍니다. 그런 다음 새 코드로 동일한 작업을 수행하십시오. 차이점을 확인해야합니다. – grettke

답변

10

목록은 LIST 기능으로 만들어집니다. 단순화 된

(apply (map (lambda (x) x) (list + - * /)) '(1 2 3 4)) 

(여전히 잘못된) :

(apply (map (lambda (x) x) '(+ - * /)) '(1 2 3 4)) 

은 (함수 목록은 여전히 ​​이해되지 않는다 적용) 될 것이다 : 기호 목록을 적용

(list 1 2 3) 

(list + - * /) 

이해되지 않는다 :

(apply (list + - * /) '(1 2 3 4)) 

그러나, mayb 커먼 리스프에서

(map (lambda (f) 
     (apply f '(1 2 3 4))) 
    (list + - * /)) 

:

(mapcar #'(lambda (f) 
      (apply f '(1 2 3 4))) 
     (list #'+ #'- #'* #'/)) 

결과 :

(10 -8 24 1/24) 
+0

내가 원하는 것은 그 순서대로이 함수를 적용한 결과를 (+ 1 (- 2 (* 3 4))) (함수 목록에서 여분의 요소를 무시하고) 목록에 반환하는 것입니다. –

+0

잘 적용하면 함수 목록이 아닌 단일 함수 만 사용합니다. 다시 시도하십시오 ... –

+2

(list # '+ #'- # '* #'/)을 가리켜 주셔서 감사합니다. –

2

내가 아무도 quasiquotation 언급하지 않았다 놀랍군요 전자 당신이 원했다.

`(,+ ,- ,* ,/) 

또는 커먼 리스프에서 : 계획에서 :-), 당신은 말할 수 있습니다, 특히 복잡한 목록을 포함하는 경우에

`(,#'+ ,#'- ,#'* ,#'/) 

, quasiquotation는 list 대응보다 읽을 수있는 코드가 훨씬 더 간단하게 번역.