2011-04-15 4 views
0

Я новичок по схеме и на этом сайте. я написать SCODE каксхема продолжается

(define function 
    (lambda (liste) 
    (do ((k 0 (+ k 1))) ((> k 3)) 
    (do ((l 0 (+ l 1))) ((> l 3)) 
     (do ((m 0 (+ m 1))) ((> m 3)) 
     (do ((n 0 (+ n 1))) ((> n 3))    
      (if(not(equal? k l)) 
       (if(not(equal? k m)) 
       (if(not(equal? k n)) 
        (if(not(equal? l m)) 
        (if(not(equal? l n)) 
         (if(not(equal? m n)) ((display k)(display l)(display m)(display n)) 

                 )))))))))))) 

    (trace function) 
    (function '(1 2 3 4))  

Это купирован ошибка =

0123. . procedure application: expected procedure, given: #<void>; arguments were: #<void> #<void> #<void> 

Когда последний if бежать, он останавливается, как я могу продолжать это?

ответ

2

Вы должны заменить

((display k)(display l)(display m)(display n)) 

по

(begin (display k)(display l)(display m)(display n)) 

Лиспа обычно оценивает шепелявость путем оценки каждого элемента списка и вызова первой записи с результатами более поздних записей, но (display k) Безразлично» t оценить функцию!

begin сообщает Схеме, чтобы просто оценить каждое из следующих условий.

Это как кодирование

(System.out.println(k))(System.out.println(l),System.out.println(m),System.out.println(n)) 

в Java.

+0

thaaaaaank большое спасибо, – user710370

+0

Добро пожаловать. – sverre

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