如何调用方案中的函数
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
是一个过程对象,您不能对其应用 car
或 cdr
。如果它的计算结果为一对,您可以对调用它的结果执行此操作。同样,如果您想使用参数 x
调用过程 translate
,它需要看起来像 (translate x)
。把它们放在一起:
(define p
(let* ((tab-result (tab))
(x (car tab-result))
(y (cadr tab-result)))
(list (translate x) y)))
我正在尝试测试一小部分代码,但出于某种原因我遇到了一些错误。这是代码。这里 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
是一个过程对象,您不能对其应用 car
或 cdr
。如果它的计算结果为一对,您可以对调用它的结果执行此操作。同样,如果您想使用参数 x
调用过程 translate
,它需要看起来像 (translate x)
。把它们放在一起:
(define p
(let* ((tab-result (tab))
(x (car tab-result))
(y (cadr tab-result)))
(list (translate x) y)))