Scheme入門(数とリスト)

情報科学概論IIA

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/Joka2a-1998/1998-04-21
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html

■データ型

1
1000000000000000000000000000000000000 
1.0
1/3
長い整数。浮動少数。分数。

■式

(+ 1 2)
(+ 1 2 (* 3 4))

■if式

(if (< 1 0) (- 1) 1)
(if (< -10 0) (- -10) -10) 
- は、1引数と2引数で動きが違う。

■defie

(define (abs x)
  (if (< x 0)
       (- x)
       x))

■cond

switch 文のようなもの。
(define (abs x)
  (cond ((< x 0) (- x))
        ((= x 0) 0)
        ((> x 0) x)))

(define (abs x)
  (cond ((< x 0) (- x))
        ((= x 0) 0)
        (else x)))

■リスト操作

'(a b c) 
(car '(a b c))
(cdr '(a b c))
(cons 'a '(b c))
(append '(a) '(b c))
(list 'a 'b 'c)

'a
'(a)

(list '(a) '(b) '(c))
(cons '(a) '(b c))
(append 'a '(b c))

■構造体もリスト

struct s1
{
	int x ;
	int y ;
	int z ;
};

'(10 20 30)
(define x '(10 20 30))
x
(car x)
(cdr x)
(car (cdr x))
(car (cdr (cdr x)))

(define (make-struct-s1 x y z)
  (list x y z))
(define (get-x s)
  (car s))
(define (get-y s)
  (car (cdr s)))
(define (get-z s)
  (car (cdr (cdr s))))

(define a (make-struct-s1 1 2 10))
(get-x a)
(get-y a)
(get-z a)

★練習問題8 2次元のベクトルの演算

2次元のベクトルを次のように表わすものとする。
(list 1 2)
和、差、内積、大きさを求める手続きを定義しなさい。

★練習問題8 3次元のベクトルの演算

3次元のベクトルについて、和、差、内積、外積、大きさなどさまざまな手続 きを定義しなさい。
Last updated: 1998/04/21 03:34:41
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>