Scheme 在列表中显示每个元素的
我有一大串较小的3元素列表,如下所示:Scheme 在列表中显示每个元素的,scheme,Scheme,我有一大串较小的3元素列表,如下所示: ( ("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 我只能访问display和for each(无“for”或“printf”
( ("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
我只能访问display和for each(无“for”或“printf”功能)
我一直在尝试为每个接受列表的函数创建一个
伪代码:
for-each list in list
display "ID=(car list)"
display "Name ="(cadr list)" "
etc
任何帮助都将不胜感激 那么,您的解释器毕竟没有
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
这是另一个版本。它避免了构建临时列表
(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)
你哪里有问题?谢谢,太好了。永远是我的荣幸!这实际上似乎是
DO
可能很方便的少数情况之一。