2009/04/10

[The Little Schemer]Numbers Games 3

WS0630

The Little Schemer」のNumbers Games。

 

一応一通り書いたので、[The Little Schemer]Numbers Games 2で書いてない分を。

 

リストの長さを求める

(define length
  (lambda (lat)
    (cond
     ((null? lat) 0)
     (else (add1 (length (cdr lat)))))))

 

指定した位置にある要素を求める(なぜかインデックスは0始まりでない)

(define pick
  (lambda (n lat)
    (cond
     ((zero? (sub1 n))(car lat))
     (else (pick (sub1 n)(cdr lat))))))

 

指定した位置にある要素を除去したリストを求める

(define rempick
  (lambda (n lat)
    (cond
     ((zero? (sub1 n))(cdr lat))
     (else (cons (car lat)
                 (rempick (sub1 n)
                          (cdr lat)))))))

 

リスト内の数値要素を除去したリストを求める

(define no-nums
  (lambda (lat)
    (if (null? lat)
        '()
        (cond
         ((number? (car lat))
          (no-nums (cdr lat)))
         (else (cons (car lat)
                     (no-nums (cdr lat))))))))

 

リスト内で数値以外の要素を除去したリストを求める

(define all-nums
  (lambda (lat)
    (if (null? lat)
        '()
        (cond
         ((number? (car lat))
          (cons (car lat)
                (all-nums (cdr lat))))
         (else (all-nums (cdr lat)))))))

 

atomの等値性を問う

(define egan?
  (lambda (a1 a2)
    (cond
     ((and (number? a1)(number? a2))
      (equals? a1 a2))
     ((or (number? a1)(number? a2))
      #f)
     (else (eq? a1 a2)))))

 

リスト内で指定した要素の出現回数を求める

(define occur
  (lambda (a lat)
    (cond
     ((null? lat) 0)
     (else
      (cond
       ((eq? (car lat) a)
        (add1 (occur a (cdr lat))))
       (else (occur a (cdr lat))))))))

 

 

The Little Schemer
The Little Schemer
posted with amazlet at 09.03.30
Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 16078
おすすめ度の平均: 5.0
5 小さなScheme処理系で学ぶ数学基礎理論
5 Schemeが好きになります
5 英語であるのが苦痛にならない楽しさ
5 面白いスタイル

 

The Seasoned Schemer
The Seasoned Schemer
posted with amazlet at 09.03.30
Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 18883
おすすめ度の平均: 5.0
5 Little Schemer とセットで

0 件のコメント:

コメントを投稿