方案继续

问题描述

| 我是该计划的新成员,也是这个网站的新成员。我写一个
(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
运行时,它停止了,我如何继续?     

解决方法

您需要更换
((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中。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...