2011-04-15 8 views
0

私はスキームとこのサイトで新しいです。私はそれがエラー立ち止まっスキームを続行

(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))  

のようなSCODE =

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

最後if実行は、それが停止し

が、私はそれをどのように継続することができますを書くのか?あなたは

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

Lispは通常、「リストの各項目を評価し、以降のエントリの結果との最初のエントリを呼び出すことにより、lispのを評価しますが、(display k) doesnので

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

を交換する必要が

答えて

2

関数に評価する!

beginは、次の各用語を単純に評価するようにSchemeに指示します。

これは、Javaで

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

をコーディングするようなものです。

+0

あなたは大変、 – user710370

+0

よろしくお願いいたします。 – sverre