[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
- Newer : 仕事での言語選択
- Older : robocopyでミラーしてみると
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
書いてみた。
複雑な例外処理だとか怪しい処理はどうかわかりませんが、こういうフィルタ系の処理は関数型言語に向いていると思います。
そもそも関数というものがそういう物ものですからね。
Cだとサブルーチンも関数と呼びますが、Pascalだってfunctionとprocedureもありますが、このこたちは関数というよりもやはり手続きです。
古いBASICだと関数とステートメントは確かに別扱いで別なんですよね。
(defun split-string(str c)
(split-string_ str c (length c) 0))
(defun split-string_(str c l idx)
(cond
((null str)
nil)
((<= (length str) (+ idx (- l 1)))
(list str))
((string= str c :start1 idx :end1 (+ idx l))
(cons (subseq str 0 idx) (split-string_ (subseq str (+ idx l)) c l 0)))
(t
(split-string_ str c l (+ idx 1)))))
(defun load-dat()
(if (null (setq line (read-line *standard-input* nil nil)))
nil
(cons (split-string line "<>") (load-dat)))
)
(defun get-title(l)
(car (cdr (cdr (cdr (cdr (car l))))))
)
(defun list2html(l n)
(cond
((= (length (car (cdr l))) 0)
(concatenate 'string "<dt>" (write-to-string n) " :<b>" (car l) " </b>:" (car (cdr (cdr l))) "<dd>" (car (cdr (cdr (cdr l)))) "<br><br>"))
(t
(concatenate 'string "<dt>" (write-to-string n) " :<a href=\"mailto:" (car (cdr l)) "\"><b>" (car l) " </b></a>:" (car (cdr (cdr l))) "<dd>" (car (cdr (cdr (cdr l)))) "<br><br>"))
)
)
(setq lines (load-dat))
(format *standard-output* "<html>~%<head>~%<title>~A</title>~%</head>~%<body>~%<dl>~%" (get-title lines))
(setq cnt 1)
(dolist (line lines)
(format *standard-output* "~A~%" (list2html line cnt))
(setq cnt (+ cnt 1))
)
(format *standard-output* "</dl>~%</body>~%</html>~%")
でもlispっぽくないなあ。 手続き臭を抜き切れていません。
2008/09/21 Programming Comment(0)
COMMENT
COMMENT FORM