【发布时间】:2017-12-02 05:15:37
【问题描述】:
读者注意:对函数式编程一无所知,对 Scheme 更是一无所知。
我在 Scheme 中有一个递归函数。在非基本情况部分,函数调用自身两次,在 if 语句中比较两次调用。我需要返回更大的结果。所以...我目前正在做的是:
(if (> (recursive-call a b-1) (recursive-call a-1 b))
(recursive-call a b-1)
(recursive-call a-1 b))
这显然需要我进行 3 次递归调用而不是 2 次。
有没有办法从 if 语句中引用递归调用的值?我不允许定义额外的函数或使用 let。我认为它与 out-mode 参数有关,但不知道如何使用、分配或访问 out-mode 参数的值。当我问教授时,我被指出函数式语言中的参数传递方法以及函数返回的一般过程。至少没有帮助。我不能发布完整的代码,因为它是一个班级的作业。这是否足以让有人指出我正确的方向?
注意:我们允许的唯一构造是 null?、car、cdr、else、lcm、+、>、if、递归函数的参数(只能是列表和数字)、整数文字和插入语。不幸的是,没有使用 max、define 或 let。
【问题讨论】:
-
使用内置的
max过程,您可以使用(max (recursive-call a b-1) (recursive-call a-1 b))而不是使用if 语句。或者,您可以定义其值为递归调用的变量,然后您可以使用已有的设置在 if 语句中比较这些变量:(if (> a b) a b),其中 a 是第一个递归调用(define a (recursive-call a b-1)),b 是另一个。 -
如果您被允许
lambda,请记住(let ((x e)) b)((lambda (x) b) e)。 -
再一次,没有 lambda,没有让。只有 null?、car、cdr、else、lcm、+、>、if、递归函数的参数、整数文字和括号。
-
请不要这样破坏你的帖子。
标签: recursion scheme parameter-passing