продолжение схемы

#scheme

#схема

Вопрос:

я новичок в scheme и на этом сайте. я пишу 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 запуск останавливается, как я могу его продолжить?

Ответ №1:

Вам нужно заменить

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

Автор:

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

Lisp обычно оценивает lisp, оценивая каждую запись списка и вызывая первую запись с результатами более поздних записей, но (display k) не вычисляет функцию!

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

Это похоже на кодирование

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

на Java.