计划继续

时间:2011-04-15 18:44:51

标签: 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 个答案:

答案 0 :(得分:2)

您需要替换

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

通过

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

Lisp通常通过评估每个列表条目并使用后面条目的结果调用第一个条目来评估lisp,但(display k)不评估函数!

begin告诉Scheme简单地评估以下每个术语。

就像编码

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

在Java中。