0

スキーム構文は初めてです。これは私が取り組んできたプロジェクトの最後の部分です。与えられたコラッツシーケンスから最大値を見つけることができましたが、プロジェクトのこの部分では、複数のコラッツシーケンスリストから最大長を見つける必要があります。したがって、たとえば次のリストを指定します:'((1 10)(10 200)(201 210)(900 1000)そして出力は次のようになります:'(20 125 89 174)数値間の最大長を見つける必要があります1から10、次に10から200 etsが私のコードです:

#lang racket
; Part I
(define (sequence n)
  (cond  [(= n 1)
      (list n)]
  [(even? n)
   ( cons n(sequence( / n 2)))]
  [(odd? n) 
   ( cons n(sequence (+(* n 3) 1))) ] ))

(sequence 10)

; Part II
(define (find-length items)
  (if (null? items)          
  (list )                   
  (cons                  
   (length (sequence(car items)))        
   (find-length (rest items))))
   )
 (find-length (list 10 16 22 90 123 169))


;Part III
(define max-in-list (lambda (ls)
(let ( (head (car ls)) (tail (cdr ls)))
  (if (null? tail)
    ; list contains only one item, return it
    head
    ; else find largest item in tail
    (let ((max-in-tail (max-in-list tail)))
      ; return the larger of 'head' and 'max-in-tail'
      (if (> head max-in-tail)
        head
        max-in-tail
      )
    )
  )
)
  ))

(define (find-max i j)
 ( if (= i j)
   (list)
  (cons
  (max-in-list (find-length(sequence i)))
  (find-max (+ 1 i ) j)
  )) 
)
(max-in-list(find-max 1 10))

(define (max-length-list items )
  (if (null? items)
  (list)

  (cons
  (find-max ? ?) ) ; how i can call this function ?
  (max-length-list (?) ) ; how i can call this function ?
  )))

(max-length-list  '((1 10) (10 200) (201 210) (900 1000) ))
4

1 に答える 1

0

渡すリストの各項目は、max-length-list2つの数字と1つのリストnilです(cons 1 (cons 2 '()))
最初の番号は(car (car items))です。
2番目は(car (cdr (car items)))です。

または、あなたがそうならlet ((head (car items))、彼らは(car head)(car (cdr head))です。

再帰呼び出しは簡単です。最初の要素をfind-maxで処理したので、残りの要素を処理する必要があります。あなたはそれをやったので、あなたは明らかにそれを達成する方法をすでに知っています。

于 2013-02-25T12:58:29.403 に答える