字符串的方案列表

时间:2013-04-26 05:34:18

标签: string list scheme

我在计划中的功能看起来像这样

(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中的字符串。现在我必须创建一个由此函数返回的所有字符串的列表。在上面,我只是显示这些字符串。我尝试了不同的方法,但没有任何结果。我尝试使用追加和缺点。

请建议。

3 个答案:

答案 0 :(得分:1)

你的最后一个if缺少else的情况,也就是人们期望函数的返回值。

您没有提及如何使用appendcons,但常见的模式是在循环中传递累积参数:

(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