我试图测试一小部分代码,出于某种原因我有一些错误。这是代码。这里tab
只是一个返回列表的函数,translate
是另一个函数。
(define p
(let ((x (car tab)) (y (cadr tab)))
(list translate(x) y)))
答案 0 :(得分:1)
函数调用写为(f args)
,其中f
是函数的名称,args
是以空格分隔的参数序列。
因此,要在没有参数的情况下调用tab
,您需要编写(tab)
并使用参数translate
调用x
,您需要编写(translate x)
。
答案 1 :(得分:1)
+
是Scheme中的常用过程,如果您评估它将评估该符号,您将获得过程对象的实现依赖表示:
+ ; ==> <procedure: +> (or something similar)
现在+
只是一个变量,在评估时,它会计算一个过程。如何称呼它只是用括号括起来:
(+) ; ==> 0
Scheme会看到括号,然后计算第一个参数+
,它就变成了程序<procedure: +>
。因为它是一个过程,所以参数以任何顺序进行评估,最后该过程适用于那些评估的参数。
如果tab
是过程对象,则无法对其应用car
或cdr
。如果它评估为一对,则可以对其进行调用。同样,如果您要使用参数translate
调用过程x
,则需要看起来像(translate x)
。把它们放在一起:
(define p
(let* ((tab-result (tab))
(x (car tab-result))
(y (cadr tab-result)))
(list (translate x) y)))