2013-06-01から1ヶ月間の記事一覧

cond の挙動

DrScheme で cond の挙動を見てましたが 少し混乱してきました。。 (cond 1) ;cond: bad syntax (clause is not a test-value pair) in: 1 (cond (a b) (c d)) ;. . reference to undefined identifier: a (cond (#f 1) (else 2)) ;2 (cond (#f 1)) ; (cond …

 REPL , car , cdr に対応してみる

コツコツと実装中です。https://github.com/moremagic/MyLisp/wiki

JavaでLispを書いてみた

Java で Lisp 書いてみました。 ちょっと動くようになったので公開してみます。https://github.com/moremagic/MyLisp実行するときはこんな感じです String[] code = { "(+ 1 2.012)", "(cons dog (cat tree))", "(quote (+ 1 2))", "(+ 1 2 3 4.10)", "(+ 1 …

Lisp処理系 パースを鋭意実装中

鋭意実装中です。 topノードにCellが入っちゃう版ができたので とりあえずこんな感じです。 public static Sexp parse(String sExps) throws ParseException { return parseCell(sExps); } private static Cell parseCell(String sCell) throws ParseExcepti…

Lisp処理系をじっそうちゅ。

cons、quote、+ を実装したところ。 もすこしうまくいったらそのうちのせます。consはこんな感じ。 public class ConsFunction implements IFunction{ @Override public Sexp eval(Cell cell, Map<String, Sexp> env) throws FunctionException{ if(cell.getCdr().length </string,>…

おもしろい

no-nums 実装

number? って基本関数なんだね。 で、基本関数ってなんだろう? Scheme 処理系で実装されている関数てことかしら? (define no-nums (lambda (lat) (cond ((null? lat) '()) ((number? (car lat)) (no-nums (cdr lat))) (else (cons (car lat) (no-nums (cdr…

pick、rempick 実装

pick (define pick (lambda (n lat) (cond ((null? lat) '()) ((= 1 n) (car lat)) (else (pick (- n 1) (cdr lat)))))) (pick 4 '(aa bb cc ddd ee ff)) ;ddd 答えと比べてみると 最終条件が zero? だなぁ。 あー 掟があったね。掟を守って書き直し。pick (…

夏休みの旅行(準備中)

夏休み、子供つれて旅行に行きます。 日本の南のほうに。飛行機、宿とも予約完了。 レンタカーはまだなのですが、まあ大丈夫でしょう。今から楽しみだけど 大変そうだなぁ。。。

(脱線)member? を改造してみた

member? は lat? が #f になる場合はすべてのS式に対して評価されない 例えばこんな感じ。 (member? 'aaa '(bbaab ccc (ddd bbb aaa) bbb)) ; #f member? を memberX? として再定義してみた。 (define memberX? (lambda (a lat) (cond ((null? lat) false) (…

multi rember, R, L, substr を書いてみた

書いてみました。multirember (define multirember (lambda (a lat) (cond ((null? lat) '()) ((eq? a (car lat)) (multirember a (cdr lat))) (else (cons (car lat) (multirember a (cdr lat))))))) ;(multirember 'aaa '(bbb aaa vvv ccc aaa bbb)) multi…

ドレイファスモデル?

書籍「リファクタリング・ウェットウェア」で言及されている エンジニアの技能レベルのことらしい。 第1段階 初心者 (レシピが必要) 経験をほとんど持たない コンテクストに左右されないルールが与えられれば仕事を遂行できる 学びたい意欲はそれほどない …

insertR と L に挑戦してみた

パッと思いついた感じで特に問題なくかけた。ただ、思いつきをメモして、晩酌後にやるので ちょっとしたところで結構時間を食ってしまう。勉強するときはお酒 cons しちゃ駄目ね。 (define insertR (lambda (new old lat) (cond ((null? lat) '()) ((eq? old…

遅延評価 って 凄そうなかんじだよね

なんのこっちゃいまだによくわかっていなかったけど 必要なときに値を求める仕組みのことを 遅延評価って言ってたのね。問題1.6 「特殊形式ifの評価規則は、解釈系が正規順序と作用的順序のどちらを使うかに無関係に同じとする。述語式を最初に評価し、その…

lat? 実装にチャレンジ

P15 lat?を書いてみてくださいという問題。 とりあえず先のページを見ないでどれだけかけるか挑戦してみました (define atom? (lambda (x) (and (not (pair? x)) (not (null? x))))) (define (lat? n) (cond ((atom? n) true) ((null? n) true) (else (and (…

Scheme手習い

Scheme手習い作者: Daniel P. Friedman,Matthias Felleisen,元吉文男,横山晶一出版社/メーカー: オーム社発売日: 2010/10/22メディア: 単行本(ソフトカバー)購入: 5人 クリック: 129回この商品を含むブログ (34件) を見るコメント欄で紹介されたのでGET実…

いかにして問題を解くか

いかにして問題をとくか作者: G.ポリア,G. Polya,柿内賢信出版社/メーカー: 丸善発売日: 1975/04/01メディア: 単行本購入: 94人 クリック: 1,656回この商品を含むブログ (155件) を見る面白そうなんで買ってみました。 まだ読んでいないのですが、ちらっと見…

問題1.18 をやってみる

1-16 を書き直すだけでした。っと。 (define (double n) (+ n n)) (define (halve n) (/ n 2)) (define (fast-expt-mul b n a) (cond ((= n 0) a) ((even? n) (fast-expt-mul (double b) (halve n) a)) (else (fast-expt-mul b (- n 1) (+ b a))))) (fast-ex…

問題1.17 でいつもどおりわからなくなる

ここまで書いたけど、なぜか無限ループしてしまう。。。 (define (even? n) (= (remainder n 2) 0)) (define (double n) (* n 2)) (define (halve n) (/ n 2)) (define (* b n) (cond ((= n 0) 1) ((even? n) (double (* b (halve n)))) (else (* b (* b (- …

問題1.16 をやってみようかと思ったけどまったくわからないのでググってみる。

ちょっとやってみたけどここまでしか書けなかった。 (define (fast-expt2 b n a) (cond ((= n 0) a) ( なので、他の人の回答をみてみました (define (fast-expt2 b n a) (cond ((= n 0) a) ((even? n) (fast-expt2 (* b b) (/ n 2) a)) (else (fast-expt2 b …