我在计划中的功能看起来像这样
(define (func1 input)
(let kloop ((x 6))
(let ((act (string-copy (func2 input2))))
(if (eq? act "") (display "null") (display act))
(if (> x 0) (kloop (- x 1)))))))
func2返回一些存储在act中的字符串。现在我必须创建一个由此函数返回的所有字符串的列表。在上面,我只是显示这些字符串。我尝试了不同的方法,但没有任何结果。我尝试使用追加和缺点。
请建议。
答案 0 :(得分:1)
你的最后一个if
缺少else的情况,也就是人们期望函数的返回值。
您没有提及如何使用append
和cons
,但常见的模式是在循环中传递累积参数:
(define (five input)
(let loop ((x 5) (outputs '()))
(if (> x 0)
(loop (- x 1) (cons input outputs))
outputs)))
> (five "yes")
'("yes" "yes" "yes" "yes" "yes")
答案 1 :(得分:0)
您在func2
六次致电input
。每次都返回不同的值吗?如果没有,这有效:
(define (func1 input)
(make-list 6 (func2 input)))
答案 2 :(得分:0)
问题有点令人困惑,您应该提供给定输入的预期输出样本。为什么在您的代码中处理空字符串的方式不同?显然递归应该在x
的值上前进,而不是func2
返回的字符串的值。另外,你为什么要复制字符串?似乎没必要。
假设命名的let
仅用于跟踪迭代次数,此解决方案似乎与您的意图一致,因为这将返回由{{1}返回的所有字符串的6个元素的列表}
func2
但我们可以更聪明,并使用名为(define (func1 input)
(let kloop ((x 6))
(if (zero? x)
'()
(cons (func2 input)
(kloop (- x 1))))))
的{{3}}解决方案,效率更高:
let