LISP Scheme Part2
■ このスレッドは過去ログ倉庫に格納されています
0304デフォルトの名無しさん
NGNGこういうの作ったけど、使う?
windows-name->scheme-name
windows式の名前をschemeの一般的な名前に変換する。
ascii/unicodeを識別する、最後のA/W は 無くなる。
例)
CreateWindowEx -> create-window-ex
ReleaseDC -> release-dc
WSAGetLastError -> wsaget-last-error
最後のがwsa-get-last-errorにならないところがちょっといい加減だけど
(define (windows-name->scheme-name s)
(assert (string? s))
(let loop ((cs (string->list s)) (r '()) (isupper #f))
(if (pair? cs)
(if (char-upper-case? (car cs))
(loop (cdr cs)
(cons (char-downcase (car cs))
(if (and (pair? r)
(not isupper))
(cons #\- r)
r))
#t)
(loop (cdr cs) (cons (car cs) r) #f) )
(string->symbol
(list->string
(reverse!
(if (and (> (length r) 2) ; 〜 -a or -w
isupper
(or (char=? (car r) #\a) (char=? (car r) #\w))
(char=? (cadr r) #\-)) ; 〜A -> 〜
(list-tail r 2)
r )))))))
■ このスレッドは過去ログ倉庫に格納されています