2013-10-09 4 views
0

Я новичок в схеме ...Петля для каждого-на схеме

может кто-то пожалуйста, объясните мне, почему для каждого оператора, не распечатывает выход ??

У меня есть график, определенный:

(define graph '((a (b.c)) (c (d)))) 

и мой тестовый код:

(define testing 
    (lambda (a-list) 
    (if (null? a-list) 
     "size = 0" 
     (for-each (lambda (i) 
        (cons (car i) (length (cdr i))) 
        (length a-list)) 
        a-list)))) 

при запуске этого (testing graph), выход ожидается в ((a . 2) (c . 1)), но не отображать ничего ...

ответ

4

for-each процедура не создает список как вывод, он просто выполняет процедуру для каждого из элементов списка ввода. Вы ищете map, который создает новый список с результатом применения функции к каждому из элементов в списке ввода. Также обратите внимание, что в вашем коде есть ошибки в отношении создания/обхода графика. Это должно исправить проблемы:

(define graph 
    '((a (b c)) ; fixed a bug here 
    (c (d)))) 

(define testing 
    (lambda (a-list) 
    (if (null? a-list) 
     "size = 0" 
     (map (lambda (i) 
       (cons (car i) (length (cadr i)))) ; fixed a bug here 
      a-list)))) 

Сейчас это работает, как ожидалось:

(display (testing graph)) 
=> '((a . 2) (c . 1)) 
+0

Чтобы быть точным правильный способ получить его ** отображается ** будет '(дисплей (тестирование график))' , (например, '#! r6rs' в DrRacket, где он не отображает никакого результата при запуске' (test graph) 'в окнах определений) – Sylwester

+0

@ Sylwester достаточно справедливо, я отредактировал свой ответ. Благодаря! –

Смежные вопросы