MzScheme:Scheme入門

MzScheme:Scheme入門

 独習Scheme 三週間

(このWiLiKiの中にはまだいっぱい情報が眠っている)

 はじめのいっぽ
 Scheme入門・目次
 about MzScheme(DrScheme)
 MzScheme の使い方

かってにリンク、途中からリンクはご法度なのだろうか?(と心配しながらリンクしています。ごめんなさい。)

数値演算

 http://www.math.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html#SEC56
   http://download.plt-scheme.org/doc/205/html/r5rs/r5rs-Z-H-9.html#%_sec_6.2.5
> (+ 10+5i 2.1+1.1i)
12.1+6.1i
> (+ 6/5 100/200)
17/10
>
> (format "~X" (+ #x20 #x30))
"50"
> (format "~X" 16)
"10"
> #x10
16
> (format "~O" 16)
"20"
> #o20
16
> (format "~B" 16)
"10000"
> #b10000
16
> #e10
10
> #i10
10.0
>
> (real-part 5+10i)
5
> (imag-part 5+10i)
10
> (magnitude 5+10i)
11.180339887498949
> (angle 10+5i)
0.4636476090008061
 参考:http://www.kt.rim.or.jp/~kbk/guile/guile_8.html
 ちょっとショックな http://pc2.2ch.net/test/read.cgi/tech/1042167213/201-300 で見つけた計算誤差
 C:\Documents and Settings\Imazu>mzscheme
 Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
 > (* 7.0 0.1)
 0.7000000000000001
 > (* 6.0 0.1)
 0.6000000000000001
 > (* 0.6 0.1)
 0.06
 どうして?こうなるの?!!

Structures

 http://download.plt-scheme.org/doc/205/html/mzscheme/mzscheme.html#node_toc_node_chap_4

構造体

C:\Documents and Settings\Imazu>mzscheme
Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
> (struct? (seconds->date (current-seconds)))
#t
> (date-second (seconds->date (current-seconds)))
26
> (struct->vector (seconds->date (current-seconds)))
#11(struct:date 1 3 7 12 9 2003 5 254 #f 32400)

Threads

 http://download.plt-scheme.org/doc/205/html/mzscheme/mzscheme-Z-H-7.html#node_chap_7
C:\Documents and Settings\Imazu>mzscheme
Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
> (thread (lambda ()
  (let countdown ((i 10))
    (if (= i 0) (display i) ; 'liftoff では何も表示しない、(display i)とすると別の入力で表示される
      (begin
        (sleep 2)
        (display i)
        (newline)
       (countdown (- i 1)))))))
#<thread:STDIN::9>
> 10 ; 2秒枚にカウントダウンの数字を表示。この表示中も別の入力を受け付ける
9
8
7
6
5
4
3
2
1
(current-thread) ; ここに何も表示されないまま入力待ちとなっているに(current-thread)を入力
0#<thread:mzscheme>
>
 参照:http://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-8.html#node_sec_6.2

Networking

 http://download.plt-scheme.org/doc/205/html/mzscheme/mzscheme-Z-H-11.html#node_sec_11.4
 参照:http://www.cs.wpi.edu/~kfisler/Courses/CS3733/Assignments/networking.html
      http://www.free-soft.org/FSM/english/issue01/sk.html

私は、MzSchemeへのテスト入力は、

C:\Documents and Settings\Imazu>mzscheme
Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
>

を立ち上げといて、ファイル等からコピーしたのを右マウスクリックでペーストして入力しています。

> (define service-port 2000)
> (define (client)
  (let-values ([(server->me me->server)
                (tcp-connect "localhost" service-port)])
    (write '朝だよ me->server) ; <- 'ping
    (close-output-port me->server)
    (let ([response (read server->me)])
      (display response) (newline)
      (close-input-port server->me))))
> (define (server)
  (let ([listener (tcp-listen service-port)])
    (let-values ([(client->me me->client)
                  (tcp-accept listener)])
      (if (eq? (read client->me) '朝だよ) ; <- 'pong
          (write 'おはよう me->client) ; <- 'pong
          (write 'あなたは誰ですか? me->client)) ; <- 'who-are-you?
      (close-output-port me->client)
      (close-input-port client->me))))
> (thread server)
#<thread:server>
> (client)
おはよう
>
 日本語もいけそうに見えるが、やっぱ文字化け有り
 clientの”'朝だよ”を変えて”'あなたは誰ですか?”を表示させる予定が
 >あなたは地ですか”
 と文字化け
 ちなみに eq? 比較の 'あなたは誰ですか? はOKだった
 thread を使用しない場合は、 MzScheme(コンソール)を2ヶ立ち上げて(server)と
 (client)を別々に実行させる。"localhost"を変更して別々のPC間でもOK。
 "[ ]"を”()”としても動作OK http://download.plt-scheme.org/doc/205/html/mzscheme/mzscheme-Z-H-14.html#node_sec_14.3

System Utilities

 http://download.plt-scheme.org/doc/205/html/mzscheme/mzscheme.html#node_toc_node_chap_15

Time

 http://download.plt-scheme.org/doc/205/html/mzscheme/mzscheme-Z-H-15.html#node_sec_15.1

dateは構造体

> (define d (seconds->date (current-seconds)))
> (struct->vector d)
#11(struct:date 32 3 7 12 9 2003 5 254 #f 32400)
> (date-second d)
32
> (date-minute d)
3
> (date-hour d)
7
> (date-day d)
12
> (date-month d)
9
> (date-year d)
2003
> (date-weak-day d)
reference to undefined identifier: date-weak-day
> (date-week-day d)
5
> (date-year-day d)
254
> (date-dst? d)
#f
> (date-time-zone-offset d)
32400
> (/ (date-time-zone-offset d) 3600)
9
>

Windows Actions

> (shell-execute #f "notepad.exe" "" (current-directory) 'sw_shownormal)
#f
でメモ帳が起動します。
> (shell-execute #f "http://www.plt-scheme.org" "" (current-directory) 'sw_shownormal)
#f
で http://www.plt-scheme.org のホームページが開いたりしますが、
関連づけ?の設定によっては開きません。
>

MzScheme, Scheme


Last modified : 2012/02/02 11:44:51 UTC