こんなのがあったんですか。
(apropos 'call-with) |
(apropos 'map) |
(apropos 'string) |
こんなのがあったんですか。
(apropos 'call-with) |
(apropos 'map) |
(apropos 'string) |
ってこういうものだったんですか。
SBCL
(defvar temp-special) (setq temp-special 1) (defun temp-special-returner () (temp-special-returner) (let ((temp-special 2)) (temp-special-returner) |
schemeだとこうはならんですね。常にレキシカルスコープ(こういう言い方していいのか知りませんが)ということですかね。
(define temp-special 0) (set! temp-special 1) (define temp-special-returner (temp-special-returner) (let ((temp-special 2)) |
dynamic-windを使うと同じようなことができるそうな。
funcall とか function とか #' とか・・・、今のところとても面倒でややこしい印象。まともに Common Lisp さわるの初めてです。
lambda, cond, zero?, +, -, 0, 1 だけで、というルールで階乗してね、ということで。
; 5の階乗 |
こんなの書けてもお得なことは何もありません(と思います)。暇つぶしとか頭の体操(罰ゲーム?)としてどうぞ・・・。
インクリメントとデクリメントで加算を行なう無名関数を作る(無名関数での再帰ということで再帰はYコンビネータ的な)
;加算 ((lambda (f)
;実行してみる (((lambda (f) ; -> 7 |
↑の加算で乗算を作る。再帰はY(ry
;乗算 ((lambda (f) ;実行してみる (((lambda (f) ; -> 20 |
で最終的に階乗の手続きを作って5を渡してみる・・・
(((lambda (f) ; -> 120 |
; 5の階乗 |
追記
-と+を間違えてたので修正
まとめではないまとめのようなもの。
次回からオンライン中継が始まりますので暇な方はのぞいてくださいね。
9LISPは勉強会自体より、その後のランチと雑談がクソ盛り上がります(笑)プログラマが集るとすごく素敵な空間を作り出します。変態技術的な意味で。
参加者:6人
初参加:1人
参加者:7人
初参加:0人
同日の午後にKPFもあるのでよろしくお願いします。
うまく取得できなかったんで、結局途中で諦めました。取り合えずメモがてら。
(use srfi-19)
(define *subscrive-key* "hoge")
(define pad0
(define date->gmt
(define param-list
(define params-join
(define auth-req-str
(define digest-sha256
(http-get "ecs.amazonaws.jp" |
gosh> "403" |
どっか間違ってるんだろうけど、またそのうち。
(map (lambda (f) (f 5 5)) '(+ - * /)) ; *** ERROR: invalid application: (+ 5 5)
(map (lambda (f) (f 5 5)) (list + - * /)) ; gosh> (10 0 25 1)気づけばGaucheをやり始めて1年が経ちました。なのに未だに全然書けないのは、そもそも書いてないからだろうなーと思います。何か作るようにしようと思います。
(define date->gmt (lambda (now) (let ((pad0 (lambda (n) (format #f "~2,,,'0,@a" n)))) (let ((yyyy (date-year now)) (MM (date-month now)) (dd (date-day now)) (hh (date-hour now)) (mm (date-minute now)) (ss (date-second now))) (string-append (string-join (list (number->string yyyy)(pad0 MM)(pad0 dd)) "-") (format #f "T~aZ"(string-join (list (pad0 hh)(pad0 mm)(pad0 ss)) ":")))))))↑の箇所が「なんだかな・・・」だったので↓のように書いてみたわけです。特に良くなったとは思いませんけども。
(define pad0 (lambda (n x) (format #f "~v,,,'0,@a" n x))) (define date->gmt (lambda (date) (let ((g (lambda (ls dl) (string-join (map (lambda (f) (pad0 2 (f date))) ls) dl)))) (string-append (g (list date-year date-month date-day) "-") (format #f "T~aZ" (g (list date-hour date-minute date-second) ":"))))))
(format #t "hello, ~a !" "valvallow") ;; gosh> hello, valvallow !#<undef> (format #t "~2,,,'0,@a" 1) ;; gosh> 01#<undef> (format #f "~2,,,'0,@a" 1) ;; gosh> "01" (format #f "~v,,,v,v@a" 5 #\0 5 1) ;; gosh> "00001"
(use srfi-1 :only (remove!)) | |
(use util.match :only (match-let1)) | |
(use net.twitter) | |
(use rfc.http :only (http-get)) | |
(use sxml.ssax :only (ssax:xml->sxml)) | |
(use sxml.sxpath :only (sxpath)) | |
; http://spreadsheets.google.com/feeds/list/t17yhzlYiMccaqCDCqCy-Bw/od6/public/basic?alt=rss | |
(define-constant *google-ss-server* "spreadsheets.google.com") | |
(define-constant *google-ss-template* | |
(string-append "/feeds/list/" "~a" "/od6/public/basic?alt=rss")) | |
(define (rss->sxml srv url) | |
(receive (ret ls xml)(http-get srv url) | |
(ssax:xml->sxml (open-input-string xml) '()))) | |
(define (make-cred con-key con-sec acc-token acc-sec) | |
(make <twitter-cred> | |
:consumer-key con-key | |
:consumer-secret con-sec | |
:access-token acc-token | |
:access-token-secret acc-sec)) | |
(define (main args) | |
(match-let1 | |
(con-key con-sec acc-token acc-sec | |
sheet-id count sxml-editor msg-builder . rest)(cdr args) | |
(let* ((eval (^b (eval (read-from-string b) 'user))) | |
(sf (eval sxml-editor)) | |
(mf (eval msg-builder)) | |
(src (sf (rss->sxml *google-ss-server* | |
(format *google-ss-template* sheet-id)))) | |
(cred (make-cred con-key con-sec acc-token acc-sec))) | |
(dotimes (i (string->number count)) | |
(sys-sleep 1) | |
(let1 msg (mf src) | |
(print msg) | |
(rlet1 r (twitter-update cred msg) | |
(set! src (remove! (^e (string=? msg e)) src) ))))))) |
(use srfi-27) (use rfc.http) (use rfc.uri) (use rfc.base64) (use sxml.ssax) (use sxml.sxpath) (define *ss-server* "spreadsheets.google.com") (define *ss-uri-prefix* "/feeds/list/") (define *ss-uri-sufix* "/od6/public/basic?alt=rss") (define *twitter-post-path* "/statuses/update.xml?status=") (define *twitter-base-host* "twitter.com") (define get (lambda (server request-uri) (http-get server request-uri))) (define rss->sxml (lambda (srv req-uri) (call-with-values (lambda () (get srv req-uri)) (lambda (ret ls xml) (ssax:xml->sxml (open-input-string xml) '()))))) (define make-src-list (lambda (sxml) (let ((ls '())) (map (lambda (item) (append ls (cadar ((sxpath '(// title)) item)))) ((sxpath '(// item)) sxml))))) ;(make-src-list (rss->sxml *ss-server* (string-append *ss-uri-prefix* *ss-id* *ss-uri-sufix*))) (define make-authorization (lambda (username password) (string-append "Basic " (base64-encode-string (string-append username ":" password))))) (define make-poster (lambda (base-host post-path) (lambda (auth) (lambda (message) (http-post base-host (string-append post-path (uri-encode-string message)) "" :authorization auth))))) (define main (lambda (args) (let ((tw-usr-name (cadr args)) (tw-psw (caddr args)) (post-uri (string-append *ss-uri-prefix* (cadddr args) *ss-uri-sufix*))) (letrec ((poster ((make-poster *twitter-base-host* *twitter-post-path*) (make-authorization tw-usr-name tw-psw)))) (let ((src (make-src-list (rss->sxml *ss-server* post-uri)))) (random-source-randomize! default-random-source) (poster (list-ref src (random-integer (length src)))))))))
参考
|