長度

2014-02-11 66 views
0

我有兩個列表中的下一個內容:長度

l1 = ((at1) (at2)) 

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

l1創建l2

的問題是:我考慮l1等的問題的一個實例,因此l2將是相同的問題的兩個實例,但是,當我用(長度L1),則結果爲2,這是不正確,此做法。 我試過做(列表l1),這導致(長度l1)= 1,但是這帶來我的功能不能很好地創建l2

我試過使用這段代碼,但是,對於這兩個列表,它不能正常工作。有了它,l2可以創建另一個列表l3,但l1不能創建l2。該代碼將是:

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

(applyfunc ((at1) (at2))...)應該返回atributes的專業化AT1和AT2,即l2。但是,對於上面的代碼,它不起作用,因爲它需要兩塊,(長度l1 = 2),而不是像實例一樣需要l1 = ((at1) (at2))。如果我採取l2,它包含2個實例,因此,結果將是l3,其中2個屬性專用於每個屬性,即像l2這樣的列表,每個屬性有4個實例和2個屬性。問題是,當l1進入時,它認爲是(at1)(at2),但沒有((at1)(at2))我該怎麼辦?感謝幫助!

+0

你想要什麼結果? 'l1'是一個模板,'l2'有兩個模板,所以結果是'2'? – GoZoner

+0

@GoZoner我需要'l1'的長度爲1而不是2,並且'l2'的長度仍然是2.然後我可以將'l1'作爲一個實例,並將'l2'作爲兩個實例像這裏解釋的功能。 –

回答

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

這種形式將評估not這原來是過程#<procedure:not>既然一切,但#f是真的,那將開始評估開始(null? l1)鏈的其餘..

你沒有的例子它是如何工作的,所以我把它留在那裏。對於Scheme而言,這太過於迫切。

+0

我已經添加了(這是缺少的,對此很抱歉,關於它是如何工作的,很難解釋,但是問題在於解釋的方式,謝謝你的回答, –

+0

@PedroL。 ('(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))'像兩塊,(長度l1 = 2),而不是一個實例,如果我使用'l2',它包含2個實例,所以結果爲'l3',每個屬性有2個屬性,也就是像'l2 '每個人有4個實例和2個屬性。 (我把這個解釋也放在了主文章中,再次感謝。) –