如何在方案中调用函数

时间:2015-10-04 19:40:51

标签: scheme

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

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

2 个答案:

答案 0 :(得分:1)

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

因此,要在没有参数的情况下调用tab,您需要编写(tab)并使用参数translate调用x,您需要编写(translate x)

答案 1 :(得分:1)

+是Scheme中的常用过程,如果您评估它将评估该符号,您将获得过程对象的实现依赖表示:

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

现在+只是一个变量,在评估时,它会计算一个过程。如何称呼它只是用括号括起来:

(+) ; ==> 0

Scheme会看到括号,然后计算第一个参数+,它就变成了程序<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)))