-1

我有值列表,并想从中获取第一个 x 值并创建 (list (listof first x values) (listof next x values) 等等,直到这个列表变空...)。

例如,给定这个列表:(list "a" "b" "c" "d" "e" "f" "g" "h" "t") 返回这个:(list (list a" "b" "c") (list "d" "e" "f") (list "g" "h" "t"))

提前致谢 :)

4

2 回答 2

1

记住列表的数据类型是什么。您的班级可能正在做类似的事情:

;; A IntegerList is one of:
;;   - '()
;;   - (cons Integer IntegerList)

鉴于此,您的模板应该反映这种结构。我将解决基本情况(我们希望将整数列表转换为一个整数的列表。

首先,我将定义一个1List数据类型:

;; a 1List is:
;;  - (cons Integer '())

接下来,函数的目的声明和签名将是:

;; Takes a list of integers and returns a list of 1Lists of the same integers
;; IntegerList -> 1List
(define (make-1list lst)
  ...)

好的酷。现在我们需要测试用例:

(check-expect (make-1list (list 1 2 3)) (list (list 1) (list 2) (list 3)))
(check-expect (make-1list (list)) (list))
(check-expect (make-1list (list 42)) (list (list 42)))

最后,我可以制作我的模板:

(define (make-1list lst)
    (cond [(null? lst) ...]
          [else        ... (first lst) ... (rest lst) ...]))

(请注意,有时先制作一些模板是有意义的,以帮助您指导所需的测试。)

最后,我们可以填写我们的代码:

(define (make-1list lst)
  (cond [(null? lst) '()]
        [else (cons (list (first lst)) (make-1list (rest lst)))]))

最后,示例也是测试,所以我们只需要运行它们以确保一切正常。

现在,既然你想制作3Lists 而不是1Lists,你知道如何按照这个秘诀来解决问题吗?

  1. 写下你的数据定义。
  2. 做你的目的陈述和签名。
  3. 做你的例子。
  4. 制作你的模板。
  5. 写出实际的功能。
  6. 将您现有的示例转换为测试。

遵循此模式应该可以帮助您将问题分解为更小的步骤。祝你好运。

于 2017-10-03T19:18:28.453 回答
0

完成此任务的更好方法是使用累加器和递归。

于 2017-10-04T23:13:00.930 回答