如何调用方案中的函数

How to call a function in scheme

我正在尝试测试一小部分代码,但出于某种原因我遇到了一些错误。这是代码。这里 tab 只是一个返回列表的函数, translate 是另一个函数。

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

函数调用写成(f args),其中f是函数名,args是space分隔的参数序列。

因此,要不带参数调用 tab,您应编写 (tab) 并使用参数 x 调用 translate,您应编写 (translate x).

+ 是 Scheme 中的一个常见过程,如果你评估它,它将评估符号,你将获得过程对象的依赖于实现的表示:

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

现在 + 只是一个变量,在求值时,它求值为一个过程。怎么称呼就是用括号括起来:

(+) ; ==> 0

发生的事情是 Scheme 看到括号,然后计算第一个参数 + 并成为过程 <procedure: +>。因为它是一个过程,所以参数以任何顺序求值,最后该过程与那些求值的参数一起应用。

如果 tab 是一个过程对象,您不能对其应用 carcdr。如果它的计算结果为一对,您可以对调用它的结果执行此操作。同样,如果您想使用参数 x 调用过程 translate,它需要看起来像 (translate x)。把它们放在一起:

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