2015-10-04 68 views
0

我试图测试一小部分代码,出于某种原因我有一些错误。这里是代码。这里tab只是一个返回列表的函数而translate是另一个函数。如何在方案中调用函数

(define p 
    (let ((x (car tab)) (y (cadr tab))) 
    (list translate(x) y))) 

回答

1

函数调用写为(f args)其中f是函数和args的参数的空间分隔的序列的名称。

所以叫tab没有参数,你会写(tab),并呼吁translate的说法x,你会写(translate x)

+0

Thanks !! (这表明我需要休息:)) –

1

+是一种常见的方法在流程,如果你评估它会评估的符号,你会得到的程序对象的实现依赖表示:

+ ; ==> <procedure: +> (or something similar) 

现在+仅仅是一个变量,当评估时,评估为一个程序。如何调用它只是用括号suround它:

(+) ; ==> 0 

什么情况是,计划看到括号,然后计算第一个参数+,并成为程序<procedure: +>。由于它是一个过程,参数以任何顺序被评估,最后过程被应用那些被评估的参数。

如果tab是程序对象,则不能向其应用carcdr。如果它评估为一对,你可以调用它的结果。同样,如果你想调用translate的程序x它需要看起来像(translate x)。把它放在一起:

(define p 
    (let* ((tab-result (tab)) 
     (x (car tab-result)) 
     (y (cadr tab-result))) 
    (list (translate x) y))) 
+0

谢谢:)。干杯 –