2014-04-07 68 views
0

我的小三元素列表,看起來像1名大名單:元素與-每個

(("001" "Bob" 80) ("002" "Sam" 85) ("003" "Aaron" 94) etc . . .) 

我想創造的東西,如:

No.1: ID=001, Name=’’Bob’’, Grade=80 
No.2: ID=002, Name=’’Sam’’, Grade=85 
No.3: ID=003, Name=’’Aaron’’, Grade=94 

我只能訪問和顯示的for-each(沒有「的」或「printf的」功能)

我一直在試圖建立一個爲 - 每一個需要的名單及功能:

僞代碼:

for-each list in list 
display "ID=(car list)" 
display "Name ="(cadr list)" " 
etc 

任何幫助將不勝感激!

+0

那麼你在哪裏有問題? – leppie

回答

1

那麼,你的翻譯畢竟沒有printf?這是一個恥辱。我們可以得到用手所需的輸出,這是一個有點麻煩,但這應該在大多數方案口譯工作,請注意額外的程序需要保持指數的軌跡:

(define lst 
    '(("001" "Bob" 80) ("002" "Sam" 85) ("003" "Aaron" 94))) 

(define (add-index lst) 
    (let loop ((lst lst) (idx 1)) 
    (if (null? lst) 
     '() 
     (cons (cons idx (car lst)) 
       (loop (cdr lst) (+ idx 1)))))) 

(for-each (lambda (e) 
      (display "No.") 
      (display (car e)) 
      (display ": ID=") 
      (display (cadr e)) 
      (display ", Name=’’") 
      (display (caddr e)) 
      (display "’’, Grade=") 
      (display (cadddr e)) 
      (newline)) 
      (add-index lst)) 

它打印出想要的結果:

No.1: ID=001, Name=’’Bob’’, Grade=80 
No.2: ID=002, Name=’’Sam’’, Grade=85 
No.3: ID=003, Name=’’Aaron’’, Grade=94 
+0

作品完美,上帝保佑你 – GeorgeCostanza

+0

謝謝,那太好了。永遠是我的榮幸! –

+1

這實際上似乎是'DO'可能方便的少數情況之一。 – leppie

0

這是另一個版本。它避免了建立臨時列表。

(define lst 
    '(("001" "Bob" 80) ("002" "Sam" 85) ("003" "Aaron" 94))) 

(define (print-list lst) 

    (define (display-one-item item index) 
    (display "No.") 
    (display index) 
    (display ": ID=") 
    (display (car item)) 
    (display ", Name=’’") 
    (display (cadr item)) 
    (display "’’, Grade=") 
    (display (caddr item)) 
    (newline)) 

    (define (helper in index) 
    (if (not (null? in)) 
     (begin 
      (display-one-item (car in) index) 
      (helper (cdr in) (+ index 1)) 
     ))) 
    (helper lst 0)) 

    (print-list lst)