2007-11-01から1ヶ月間の記事一覧

サクラ

コダチダリア

サクラ

オオリュウキュウ

くるいざき?

シロガネヨシ

SCIP 1.12を解いてみた

Exercise 1.12. The following pattern of numbers is called Pascal's triangle.The numbers at the edge of the triangle are all 1, and each number inside the triangle is the sum of the two numbers above it.35 Write a procedure that computes el…

SCIPの1.11を解いてみた。

めずらしく英語のページを読む気になった。 Exercise 1.11. A function f is defined by the rule that f(n) = n if n 3. Write a procedure that computes f by means of a recursive process. Write a procedure that computes f by means of an iterative…

Gaucheでリスト内包表現にチャレンジ(まずは..)

まだマクロが全然わかってないんだがとりあえずやってみたい気持ちが先行中(笑) ということで実装してみたのがこれ。 >>(define .. (lambda (x y) (let ((e (- y x -1))) (if (< e 0) () (iota e x))))) =>.. >>(.. 0 10) =>(0 1 2 3 4 5 6 7 8 9 10) >>(..…

Haskellの表記をGaucheと併せて比べてみる。

まずは、shiroさんに教えてもらったGaucheのコード*1 (use util.match) (define qsort (match-lambda (()()) ((x . xs) (receive (l r) (partition (cut < <> x) xs) `(,@(qsort l) ,x ,@(qsort r))))))次になるべく似せたHaskellのコード import List qsort…

Gaucheでuniq(そろそろやめよう)

なんてことだ。gauche.sequence の group-sequenceがhaskellのgroupと同じだとは >>(use gauche.sequence) =>#<undef> >>(group-sequence '(1 1 2 3 3 2 2 4)) =>((1 1) (2) (3 3) (2 2) (4)) >>(map car (group-sequence '(1 1 2 3 3 2 2 4))) =>(1 2 3 2 4)あと、</undef>…

ghci中でモジュールをインポートする

いつも忘れてしまうのでメモする importをghci中で用いるには :mをつかう。 Prelude> :m List Prelude List> あと hugsでは whereだが、 ghciではlet

rubyでクイックソートを書いてみる。

そういえば今までrubyでは .sortをつかって知らない振りをしていたんだがrubyで書くとどうなるかやってみる。 >> def qsort(x) x.size<2?x:(y=x.shift;z=x.partition{|i|i<y};[qsort(z[0]),y,qsort(z[1])]) end => nil >> qsort([3,4,5,1,1,2]) => [[[], 1, [[], 1, [2]]], 3, [[], 4, [5]]] >> def </y};[qsort(z[0]),y,qsort(z[1])])>…

Gaucheでcutをやってみる

なるほど、カリー化とまでは行かないけど簡単に関数が作れるんだな。すごい。srfi-26 >>((lambda (x) (+ 1 2 x 4 5)) 6) =>18 >>((cut + 1 2 <> 4 5) 6) =>18 >>((cut + 1 2 <> 4 <>) 6 7) =>20 >>((cut <> 1 2 3 4 5) *) =>120よし、これでshiroさんのプロ…

準クオート

しょうがないやるか。 >>(let ((x '(1 2 3 4))) `(a x c d)) =>(a x c d) >>(let ((x '(1 2 3 4))) `(a ,x c d)) =>(a (1 2 3 4) c d) >>(let ((x '(1 2 3 4))) `(a ,@x c d)) =>(a 1 2 3 4 c d) >>(let ((x 2)) `(a ,x c d)) =>(a 2 c d) >>(let ((x 2)) `(…

Gaucheのpartitionでqsort

多値を使ったpartitionでqsortをしてみる >>(define qsort (lambda (x) (if (null? x) () (receive (l r) (partition (lambda (y) (< y (car x))) (cdr x)) (append (qsort l) (list (car x)) (qsort r)))))) =>qsort >>(qsort '(5 3 4 2 3)) =>(2 3 3 4 5)r…

Gaucheで多値を扱う。

filterとremoveを同時にやるpartitionを教えてもらったので使ってみようと思ったらなんと多値じゃないか。 なになに?参照渡しがどうのこうの・・・って schemeは参照渡しだよな。 >>(let ((a '(1 2 3))) (print a)((lambda (x) (filter! odd? x)) a) a) (1 …

Gaucheのutil.matchを勉強してみる

とりあえずはこんなかんじらしい >> (match '(1 2 3) ((a b c) (list a b c))) => (1 2 3) >> (match '(1 (2 3)) ((a (b c)) (list a b c))) => (1 2 3)つぎに、リスト処理させてみる >>(match '(1 2 3 4) ((x . xs) (print x))) 1 =>#<undef> >>(match '(1 2 3 4) </undef>…

GHCでUNIQ

一つ違いzipによるuniq まあ、昨日のscheme版の焼き直し。haskellの方が読みやすいが数字しかuniq出来ない あと、メタな記号が入れられないので(今回は1000でごまかした)いまいち。 Prelude> (\x->reverse $ drop 1 $ reverse $fst $ unzip $ filter (\x->…

cygwinとghciの悲しい関係

なんてことだ。mingwでコンパイルされたghci.exeはコマンドプロンプトではreadlineが動くが、cygwin上では動かない。 しょうがないのでrlwrapをかませてみる。.bashrcに以下を記述して解決 PATH=~/bin/ghc/bin:$PATH #ghcのバイナリへのパスを加える alias g…

GaucheでUNIQ

一つずらしたリストとzipして同じ要素のタプルを削除するフィルターを通す版 更に追記。zipつかうとちょっとだけ富豪な気分 srfi-1のzipは少ない方で作るので (cons () x)がちょっとだけかっこわるい。 >> (define uniq (lambda (x) (unzip1 (filter (lambda…

Gaucheでクイックソート

リストから任意のものを抜き出すのはrubyだとselectだからと思って探してみると srfi-1のfilterがそうだった。 >> (define qsort (lambda (x) (if (null? x) () (append (qsort (filter (lambda (y) (< y (car x))) (cdr x))) (list (car x)) (qsort (filter…

Gaucheで可変長の引数を扱う。

なるほどな。dorリストつかうのか。 >> ((lambda (x . y) (print x y)) 1) 1() => #<undef> >> ((lambda (x . y) (print x y)) 1 2) 1(2) => #<undef> >> ((lambda (x . y) (print x y)) 1 2 3) 1(2 3) => #<undef> >> ((lambda (x . y) (if (null? y) "only x" "x and y")) 1) =></undef></undef></undef>…

(続々)Gaucheで「カブらない数字を4桁だすの」をやる*1

http://d.hatena.ne.jp/n9d/20071120/1195568232で、shiroさんに教えて頂いたのでもう少しやってみる。 gauche.sequenceを使う方法 >> (begin (use srfi-1) (use gauche.sequence) (take (shuffle (iota 10)) 4)) => (8 9 5 0) append-mapを使う方法 やばい…

(続)Gaucheで「カブらない数字を4桁だすの」をやる

util.combinationsを教えてもらったので富豪で再チャレンジ。 http://practical-scheme.net/gauche/man/gauche-refj_158.html#SEC430 何故かわからないが順列という名であるのにnPrでr=nのときしか用意されていない。 >> (permutations '(1 2 3)) => ((1 2 3…

(続)Gaucheで「カブらない数字を4桁だすの」をやる

引数のリストと同じメンバーがいないような数字をランダムで出力するyを使用。 なんかletだらけになるのが気持ち悪い。 >> (let me ((x ())) (define y (lambda (x) (let me ((a x)) (let ((b (random-integer 10))) (if (memq b a) (me a) b))))) (if (> (l…

必殺!○○包み

「必殺、括弧包み!」とつっこみたかっただけ。 Archives > October 25, 2007">「ワイは猿や!コンビネーター猿や!」 「必殺、包み包み!」

.gauchercでgoshのプロンプトをカスタマイズする

srfi-1はtakeの関係上いつも使いたいのでいれておく。 あと、irbの:SIMPLEタイプにプロンプトを変える。 (use srfi-1) (read-eval-print-loop #f #f (lambda (result) (print "=> " result "\n")) (lambda () (display ">> ")(flush))) (display "\nbye...\n…

irbのプロンプトをシンプルにする。

以前から気になっていたんだが、irbのプロンプトに余計なものが出過ぎていたので.irbrcを以下のようにした。 IRB.conf[:PROMPT_MODE] = :SIMPLEこうするとマニュアルの記述はirbの出力だったことがわかる。 $ irb >> 1+2 => 3 >>

Gaucheで「カブらない数字を4桁だすの」をやる

まだまだだ。 乱数はsrfi-27番。 (use srfi-1) (use srfi-27) (random-source-randomize! default-random-source) (display (let me ((i (iota 10 0)) (j 4)) (if (> j 0) (let ((k (random-integer (length i)))) (cons (list-ref i k) (me (delete k i) (-…

(続)Arrayオブジェクトにもの申す

1.7からのArray#fetchが未チェックだったことが判明。 (ありがとうございます>id:winebarrel さん)ということで、書き直す。 #!/usr/bin/ruby class Array def [](i) self.fetch(i) end end a=Array[1,2,3] puts a[0] # =>1 puts a[2] # =>3 puts a[3] # =…