lisp

JavaScriptでNode.JS/ブラウザ上で動くArc処理系を作った。

去年の夏ぐらいに、NodeJS/ブラウザ上で動くArc言語*1処理系「ArcJS」を作りました。 全体として2500行ぐらいでStackVMまで実装してあるので、処理系を作りたい人は参考になるかもしれません。http://smihica.github.io/arc-js/既に実際に仕事で部分的に使っ…

sbclのrun-processで、process-outputが読めなくなる

(defun read-all (output-stream) (if (null output-stream) "" (with-output-to-string (lines) (awhile (read-line output-stream nil nil) (format lines "~a~%" it))))) (defun execute (command &key (wait t)) (destructuring-bind (program &rest arg…

自作小説SNS「ranoba」公開

自作小説SNS「ranoba(らのば)」というサービスを作りました。 この場で公開します。http://www.ranoba.com/ ranobaとは? ranoba(らのば)は、気軽な自作小説の執筆,公開,意見交換を目的とした、自作小説コミュニティーサービスです。pixiv的な小説共有サ…

sbclからGmailをSMTPサーバとし、メール送信する

手順 cl+sslをインストール (require :asdf) (require :asdf-install) (asdf-install:install :cl+ssl) cl-smtpをインストール。 20090306現在、asdfのcl-smtpではssl/tslが使えない。 cvsリポジトリ↓から最新のものを持ってくる。 http://common-lisp.net/c…

lambdaを生成するリーダマクロ

arcのマクロ(gaucheにもあった?) (fn (_) (if (odd _) (+ _ 10)) とかを [if (odd _) (+ _ 10)] でかけるやつ。 がちょっと便利そうだったので、CommonLispで作ってみた。 (defun deep-find (item seq &key (test #'eql)) (if (not (null seq)) (or (if (…

UTF8の文字境界を判定

日本語英数字が混在した文章を、指定バイト数以下に切り詰める必要が出た。 common lispにはsubseqという関数があるが、そのまま使うと文字ごとにきられてしまう。 (subseq "あいうえお" 0 4) ;本当は4バイト以下にしたい。 ->"あいうえ" ;4文字以下となって…

sbcl+aserveで日本語が通らない

最近はCommonLispでいろんな問題につっかかってるわけですが・・・ sbcl+aserveで、*html-output*に日本語を含んだ文字列を投げると、エラーになってしまう。 たとえば、 (publish :path "/" ... (let ((*standard-output* net.html.generator:*html-stream*)) …

clsqlがとまる

clsqlについては http://d.hatena.ne.jp/yuki_neko_nyan/searchdiary?word=clsql がすごくよくまとまっている。参考になる。 CLOSを用いた簡易O/R Mapperのような機能をつかい、セレクタマクロを書いて、dbからレコードを取得していた。 (defmacro db-select…