2017-10-02 5 views
-1

나는 값의 목록을 가지고 있고 그것으로부터 첫 번째 x 값을 가져 와서 (list (첫 번째 x 값의리스트) (다음 x 값의리스트) 등등 ...이리스트가 비게 될 때까지 계속 ...). 이 목록 주어진 예를 들어목록을 BSL의 여러 부분으로 나눌 수 있습니까?

: (list "a" "b" "c" "d" "e" "f" "g" "h" "t") 수익이 : 사전에 (list (list a" "b" "c") (list "d" "e" "f") (list "g" "h" "t"))

감사합니다 :)

답변

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)))])) 

마지막으로 예제 또한 테스트이므로 모든 것이 제대로 작동하는지 테스트해야합니다.

이제 1List 대신 3List을 만들고 싶으므로이 방법을 따라 문제를 해결할 수있는 방법을 알고 계십니까?

  1. 데이터 정의를 적어 둡니다.
  2. 목적 진술과 서명을하십시오.
  3. 예를 들자.
  4. 템플릿을 만듭니다.
  5. 실제 기능을 작성하십시오.
  6. 기존 예제를 테스트 해보십시오.

이 패턴을 따르면 문제를 더 작은 단계로 나눌 수 있습니다. 행운을 빕니다.

0

이 작업을 수행하는 더 좋은 방법은 누적기를 사용하는 것입니다. & 재귀.