Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2006-10-21

勉強するよ.19

| 01:12 | 勉強するよ.19 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.19 - わだばLisperになる

Schemeの勉強.19

今日も17章 CGIスクリプト

17.2 例: 選択された環境変数の表示

今回も、(define getenv sys-getenv)の様に差異を吸収

だけで、例題をそのまま実行可能

2006-10-19

勉強するよ.18

| 23:51 | 勉強するよ.18 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.18 - わだばLisperになる

Schemeの勉強.18

独習 Scheme 三週間 Teach Yourself Scheme in Fixnum Days

今日は最終章である17章 CGIスクリプト。

長いので分割して実習してみる。

今回もGaucheでの実習の為、適宜書き換えてみたり、と

いっても今回は、getenv→sys-getenvとするだけ。

17.1 例: 環境変数の表示

#!/usr/bin/env gosh

;content-type がプレーンテキストであることを確認

(display "content-type: text/plain") (newline)
(newline)

;要求された情報を含むページを生成
;これは単に標準出力に書き出すだけ

(for-each
 (lambda (env-var)
   (display env-var)
   (display " = ")
   (display (or (sys-getenv env-var) ""))
   (newline))
 '("AUTH_TYPE"
   "CONTENT_LENGTH"
   "CONTENT_TYPE"
   "DOCUMENT_ROOT"
   "GATEWAY_INTERFACE"
   "HTTP_ACCEPT"
   "HTTP_REFERER" ; [sic]
   "HTTP_USER_AGENT"
   "PATH_INFO"
   "PATH_TRANSLATED"
   "QUERY_STRING"
   "REMOTE_ADDR"
   "REMOTE_HOST"
   "REMOTE_IDENT"
   "REMOTE_USER"
   "REQUEST_METHOD"
   "SCRIPT_NAME"
   "SERVER_NAME"
   "SERVER_PORT"
   "SERVER_PROTOCOL"
   "SERVER_SOFTWARE"))

2006-10-18

Google Code Search

| 23:05 | Google Code Search - わだばLisperになる を含むブックマーク はてなブックマーク - Google Code Search - わだばLisperになる

暇な感じなので、Google Code Searchで、適当にLisp的

な物を検索。

Lisp系はは大きくLispとschemeの二つに絞り込めるっぽい。

何となくdefineq lang:lispって感じで探してみる。

; The DEFINEQ function is used to define a set of Interlisp functions.
; We define DEFINEQ so that it saves the function definition on a
; property of the function called INTERLISP-DEFINITION.

(defmacro defineq (&rest forms)
  (let ((value nil))
    (do ((forms forms (cdr forms)))
	((null forms))
	(setq value (cons `(setf (get (quote ,(car (car forms)))
				      'interlisp-definition)
				 (quote ,(cadr (car forms))))
			  value))
        (format t "~A " (caar forms))
        (force-output))
    (cons 'prog (cons nil value))))

こんなのが引っ掛かりました。それなりに面白そう。

2006-10-14

勉強するよ.17

| 18:23 | 勉強するよ.17 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.17 - わだばLisperになる

Schemeの勉強.17

独習 Scheme 三週間 Teach Yourself Scheme in Fixnum Days

今日は、第16章シェルスクリプト

主にというか、UNIXのシェルスクリプトとして動かして

みようってわけらしい。

Gaucheの場合、スクリプトの内容にmainを定義すること

によって、そのmainを呼ぶことで実行する仕組があるよ

うで、詳細は、

Gauche ユーザリファレンス: 3.3 Schemeスクリプトを書くを参照。

ということで、

#!/usr/bin/env gosh

(define (main args)
  (begin 	
    (display "Hello, World!") 
    (newline)))
#!/usr/bin/env gosh

(define (main args) 
  (let ((argv-count (length args)))
    (let loop ((i 1))			;$1 ...
      (unless (>= i argv-count)
	      (display (list-ref args i))
	      (newline)
	      (loop (+ i 1))))))
#!/usr/bin/env gosh

;; floppy-size = 3.5インチフロッピィにおさまるバイト数
(define floppy-size 1440000)

;; split は大きなファイル f をフロッピィの容量サイズの小さいサブファイルに
;; subfile-prefix.1、subfile-prefix.2 などに分割する。
(define split
  (lambda (f subfile-prefix)
    (call-with-input-file f
      (lambda (i)
        (let loop ((n 1))
          (if (copy-to-floppy-sized-subfile i subfile-prefix n)
              (loop (+ n 1))))))))

;; copy-to-floppy-sized-subfile は次の 1.44M Byte (のこりがこれよりも
;; 少ければ、全部)をその大きいファイルから n 番目のサブファイルに
;; コピーする。まだ、残っていれば真を返し、さもなければ、偽を返す。
(define copy-to-floppy-sized-subfile
  (lambda (i subfile-prefix n)
    (let ((nth-subfile (string-append subfile-prefix "."
                                      (number->string n))))
      (if (file-exists? nth-subfile) (sys-remove nth-subfile))
      (call-with-output-file nth-subfile
        (lambda (o)
          (let loop ((k 1))
            (let ((c (read-char i)))
              (cond ((eof-object? c) #f)
                    (else
                     (write-char c o)
                     (if (< k floppy-size)
                         (loop (+ k 1))
                         #t))))))))))

(define (main args)
  ;; bigfile = スクリプトの第一引数= 分割する必要のあるファイル
  ;; subfile-prefix = スクリプトの第二引数 = サブファイルのベース名
  (let ((bigfile (list-ref args 1))	
	(subfile-prefix (list-ref args 2)))
    ;; split を呼び、subfile-prefix.{1,2,3,...} を bigfile から生成する。
    (split bigfile subfile-prefix)))

と書き直してみる。

2006-10-03

勉強するよ.16

| 21:49 | 勉強するよ.16 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.16 - わだばLisperになる

Schemeの勉強.16

今日は、第15章 エンジン

「エンジンは時分割プリエンプションに従う計算を表現す

るものです。」

とのことだけど、call/ccとかの応用例ってことかしら。

なんとなく、今迄の総合的な応用っぽいね。

ということで、全体をざーっと眺めて、ふーんって言っ

て終える。

他所の教材も色々眺めて、また帰ってくる場所って感じ

かなと。

2006-10-01

勉強するよ.15

| 00:26 | 勉強するよ.15 - わだばLisperになる を含むブックマーク はてなブックマーク - 勉強するよ.15 - わだばLisperになる

Schemeの勉強.15

今日は、第14章でambオペレータで非決定性、バックトラッ

クとか。

バックトラックといえば、Plologとかも触ってみたいな

とも思ったりする。

前に コワルスキの『論理による問題の解法=Prolog入門』

を途中まで読んで挫折したが…。

ambの解説に関しては、SICP等参照とのこと。

ここまで来ると、入門って感じでもないので、まあ、何

となく、こういうのもあるんだなという程度に押える。

もうひとつの Scheme 入門の非決定性が分かりやすい解

説で参考になる。