在Scheme中返回一个真值

在Scheme中返回一个真值,scheme,Scheme,我在Scheme中执行这个程序时遇到了一些问题,尽管我认为我已经完成了90%。不幸的是,我需要有点含糊不清,因为这是一个家庭作业 我需要将一个列表作为输入,生成列表的所有可能子序列,并返回一个符合特定条件的列表。我已经完成了生成列表的所有子序列的代码,以及判断某个子集是否是解决方案的代码。然而,我很难让Scheme返回该解决方案。我的代码现在基本上是这样的 (define (function rest_of_list subsequence) (if (subsequence is a

我在Scheme中执行这个程序时遇到了一些问题,尽管我认为我已经完成了90%。不幸的是,我需要有点含糊不清,因为这是一个家庭作业

我需要将一个列表作为输入,生成列表的所有可能子序列,并返回一个符合特定条件的列表。我已经完成了生成列表的所有子序列的代码,以及判断某个子集是否是解决方案的代码。然而,我很难让Scheme返回该解决方案。我的代码现在基本上是这样的

(define (function rest_of_list subsequence)
    (if (subsequence is a solution) subsequence)
    (if (> (length rest_of_list) 0) (function (cdr rest_of_list) (append subsequence (car rest_of_list))))
    (if (> (length rest_of_list) 0) (function (cdr rest_of_list) subsequence)))

这段代码应该为列表中的每个元素做的是,它在两个方向上递归分支。在一个方向上,它将(carrest\u of_list)添加到子序列中,并沿列表向下继续。在另一个方向上,它将忽略(轿厢休息列表中的轿厢休息),并继续沿列表向下移动。一旦它找到一个可接受的子序列,它就会返回它,这是调用函数的函数的结果。现在我只得到空白输出。我有点理解我的猜测,但还不足以解决这个问题。

如果不了解具体的实现细节,可能会有点棘手,但我会按照以下思路做一些事情:

(define (function rest_of_list subsequence)
  (cond ((null? rest_of_list)
         '())
        ((subsequence is a solution)
         subsequence)
        (else
         (combine (function (cdr rest_of_list) (append subsequence (car rest_of_list)))
                  (function (cdr rest_of_list) subsequence)))))

有趣的部分是如何
组合这两个分支,它可以像
cons
一样简单。还请注意,可能缺少一个基本情况:如果列表的其余部分为空,会发生什么情况?

如果不查看实现的确切细节,会有点棘手,但我会按照以下思路做一些事情:

(define (function rest_of_list subsequence)
  (cond ((null? rest_of_list)
         '())
        ((subsequence is a solution)
         subsequence)
        (else
         (combine (function (cdr rest_of_list) (append subsequence (car rest_of_list)))
                  (function (cdr rest_of_list) subsequence)))))

有趣的部分是如何
组合这两个分支,它可以像
cons
一样简单。还请注意,可能缺少一个基本情况:如果列表的其余部分为空,会发生什么情况?

这无疑帮助我了解了我做错了什么。看来我现在把它修好了。需要在递归的每个步骤中明确定义哪个递归分支会导致有效的答案(或者如果两者都有,只需选择一个),而不是像过程语言那样,期望Scheme在返回true时立即返回。这无疑帮助我了解了我做错了什么。看来我现在把它修好了。需要在递归的每个步骤中明确定义哪个递归分支会导致有效的答案(或者如果两者都有,只需选择一个),而不是像过程语言那样期望Scheme在返回true时立即返回。