好吧,这听起来像一个荒谬的问题,但你如何在方案中返回一个列表?

没有正确的解决方案

其他提示

根据看到一些你的其他问题,我想你可能会遇到麻烦你头上缠着如计划的核心功能语言的概念。

目前的水平你正在学习方案(新手),每次写功能具有一个输入和一个输出,每一个函数的主体是一个单一表达式。无论值表达式评估为函数返回。有没有必要明确“回归”什么,你会像Java或C命令式语言;它恰好作为评估所述表达的直接后果。

的功能的主体是一个单一表达式。这不是像Java其中的方法的主体由一系列指令的:

do this
then do that
then do something else
then return something (maybe)

Scheme函数评估单个表达;而已。下面是增加了5任何数目作为参数被传递给一个简单函数:

(define (add5 x)
  (+ x 5))

的功能的主体(+ x 5),这仅仅是要被评估的表达式。 x的值被插入,+(加法)函数应用于x和5,并返回结果。

列表是没有多大的不同。所有你需要的是将建立一个列表中的表达式。两个已经提到:列表用于从头开始建立一个列表,如果你已经拥有的所有元素;的缺点用于单个元件添加到现有的列表中,并经常递归使用。

下面是要消耗数n并建立列表(n n-1 n-2 ... 0)

的函数
(define (makelist n)
  (if (= n 0)
     (list 0)                       ; base case. Just return (0)
     (cons n (makelist (- n 1)))))  ; recursive case. Add n to the head of (n-1 n-2 ... 0)

在基座和递归情况下,两个,一个列表是通过简单地计算表达式返回的列表中建设功能的用途之一。

下面是另一个例子。此一个采用我们的add5功能至5添加到数字的列表(LON)的每个元素:

(define (add5list lon)
  (if (null? lon)
    `()                 ; base case: lon is empty. Return an empty list.
    (cons (add5 (car lon)) (add5list (cdr lon)))))  ; recursive case.
                                                    ; Add 5 to the head of lon and prepend it to the tail of lon

再次既基部和递归情况下通过计算表达式返回列出了结果在列表中。

要记住计划的关键一点是所有函数返回的东西,这东西简直就是计算表达式的结果。一个方案的功能的主体是一个单一表达式。

您可能想简单地说:'(2 3 5 7 11)(list 2 3 5 7 11)

可以还通过指定的元素,将其添加到列表构造列表:(cons 2 (cons 3 '()))

下面是从函数返回的列表的示例:

(define returnlist 
  (lambda(a b c) 
    (cons a (cons b (cons c '())))
))

(returnlist 2 3 4)

返回值将是列表:(list 2 3 4)

另一个不那么众所周知的方式做到这一点:

> ((lambda x x) 2 3 5 7 11)
(2 3 5 7 11)

这就是,“列表”函数本身可以被定义为:

> (define list (lambda x x))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top