길이

2014-02-11 2 views
0

나는 다음 내용이 목록을 가지고 :길이

l1 = ((at1) (at2)) 

l1에서 생성 l2

l2 = (((at11) (at21))((at12) (at22))) 

.

문제는 다음과 같습니다. l2은 동일한 문제의 두 인스턴스가 될 것이지만, (길이 l1)을 사용하면 결과가 2가되며이 문제는 올바르지 않습니다. 접근. (길이 l1) = 1 인 결과 (목록 l1)을 시도했지만이 기능이 제 기능을 제대로 수행하지 못합니다. l2.

이 코드를 사용해 보았지만이 두 목록에서는 정상적으로 작동하지 않습니다. 이 경우 l2l3이라는 다른 목록을 만들 수 있지만 l1l2을 만들 수 없습니다. 코드는 다음과 같습니다

(define (applyfunc l1) 
    (let ((l2 '())) 
    (cond ((not(null? l1)) 
       (for/list ([i (length l1)]) 
       (set! l2 (append l2 (func l1))) 
       ) 
      ) 
     ) 
    l2) 
) 

(applyfunc ((at1) (at2))...)는, 즉, AT1 및 AT2 l2을 부가 요소의 전문화를 반환해야합니다. 그러나 위의 코드에서는 l1 = ((at1) (at2))이 두 개 (길이 l1 = 2)인데 인스턴스가 아니기 때문에 작업하지 않습니다. l2을 가져 가면 인스턴스가 2 개이므로 결과는 l3이고 각 인스턴스에 대해 2 개의 속성, 즉 l2과 4 개의 인스턴스와 2 개의 속성이있는 목록이 있습니다. 문제는 l1이 입력 될 때 (at1)(at2)을 고려하지만 어떤 것도 허용하지 않는다는 것입니다. ((at1)(at2)) 어떻게 처리 할 수 ​​있습니까? 도와 주셔서 감사합니다!

+0

원하는 결과가 있습니까? 'l1'은 템플릿이고,'l2'는 두 개의 템플릿을 가지고 있으므로 결과는 '2'입니까? – GoZoner

+0

@GoZoner 'l1'의 길이가 2가 아니라 1이 될 것이고,'l2'의 길이는 2가 될 것입니다. 그러면'l1'을 인스턴스로,'l2'를 두 인스턴스로 취할 수 있습니다. 여기서 설명하는 것과 같은 함수. –

답변

0
(cond (not (null? l1) ...)) 

이 양식은

당신은 어떤 사례가 없다 .. 절차 #<procedure:not>#f하지만 모든 것이 사실이기 때문에이 (null? l1)로 시작하는 체인의 나머지 부분을 평가하기 시작합니다 것으로 판명되는 not을 평가합니다 어떻게 그렇게 일할 것인가? Scheme에서 이것은 너무나 긴급합니다.

+0

(누락되었습니다.) 죄송합니다. 작동 방법에 대해 설명하기는 어렵지만 문제는 설명 아래로 고려됩니다. 답변 주셔서 감사합니다. –

+0

@PedroL. 사용 예 (applyfunc '((at11) (at21)) ((at12) (at22))))'와'(applyfunc'((at1) (at2))))는 리턴 할 것입니다. 지금은'((at11) (at21))'또는'(at11)'과 같은 요소에'func'의 결과를 추가한다고 가정하고 있지만, func는 정의되어 있지 않습니다. 전혀 행해지 지 않습니다. 지금 당장 질문하는 것이 잘못 정의 된 것 같습니다. [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Sylwester

+0

Ok.' (applyfunc ((at1) (at2))'at1과 at2의 애트리뷰트, 즉'l2'를 반환해야하지만, 위의 코드에서는'l1 = ((at1) (at2))'를 두 조각과 같이 사용하기 때문에 작동하지 않습니다. (length l1 = 2)이고 인스턴스와 다르다. 만약'l2'를 취하면 인스턴스가 2 개이므로 결과는'l3'이 될 것이고, 각각에 대해 2 개의 속성, 즉'l2 '4 개의 인스턴스와 2 개의 각각의 속성이 있습니다. (이 설명을 메인 포스트에도 넣었습니다. 다시 고마워요.) –