とりとめのないことを書いております。
by tempurature
カテゴリ
全体
プログラミング
scheme
verilog
未分類
以前の記事
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 03月
お気に入りブログ
PHPで競技プログラミング
メモ帳
最新のトラックバック
ライフログ
検索
タグ
その他のジャンル
ブログパーツ
最新の記事
情報処理技術者試験 お疲れ様..
at 2016-04-17 18:55
基本情報技術者試験 平成27..
at 2016-04-14 04:48
基本情報技術者試験 平成27..
at 2016-04-13 23:03
苦い薬(ハーブ、サプリメント..
at 2016-04-09 14:03
「おバカ度チェックリスト」を..
at 2016-03-24 09:54
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
タグ:Racket ( 45 ) タグの人気記事
【racket】subprocessを使ってみた
subprocessのサンプルを作成しました。
実行するにはcygwinがインストールされている必要があります。

(2015.12.8 ソースコードを修正)


#lang racket

(define-values (p i o e) (subprocess #f #f #f "C:\\cygwin64\\bin\\cat.exe"))

(write (read-line) o)
(close-output-port o)
(display (read-line i))
(display "\n")
(close-input-port i)
(close-input-port e)

(subprocess-wait p)
(subprocess-status p)


[PR]
by tempurature | 2015-12-06 23:54 | scheme
【racket】REALM OF RACKET 3章まで読みました
前の記事で、REALM OF RACKETはHtDPと変わらないといってましたが、大きな違いがありました。HtDPでは、choose languageでHtDP専用の言語を選択しなければならないのですが、REALM OF RACKETではちゃんと#lang racketしていました。

つまり、REALM OF RACKETはracket言語の入門書であるといえます。

また、この本には分からない英単語(特に形容詞)が出てきますが、非常に丁寧な説明なので読み飛ばせます。つまり、あまり辞書を引かなくても読める本なので、とにかく英語の本を1冊読みたい人にはおすすめかもしれません。

3章では、RacketのListとStructureについて解説していました。StructureはCの構造体とほぼ同じ概念なのですが、Schemeにはない概念だったと思います。RacketはCやJavaに似たような仕組みが沢山あって、それがRacketを使いやすくしているのですが、SchemerにとってはLisp感なくてがっかりさせてしまうのかもしれません。CやJavaの仕組みというのは、わかりやすいのですが、冗長でもあります。

また、Structureは、1個定義するとフィールドの数だけアクセサを定義します。これがどことなくpythonぽくていやなのです。慣れればなんということもないのでしょうけれども。

3章で特出すべきところとして、Racketのコメント形式について触れていました。Racketには、行コメント(line comment), ブロックコメント(block comment), S式コメント(S-expression comment)の3つがあります。

; 行コメント
; 行コメント
; 行コメント


#|
ブロックコメント

#| ブロックコメントは入れ子にできます |#

ブロックコメントの終わり
|#


#;(string-append
"S式コメント"
""
"ソースコードをスイッチさせて実行させたい時、"
"#;をS式の前に入れるとそのS式全部をコメントアウトできるようですよ")

(define (loop num)
  (unless (= num 10)
    ; S式コメントはローカル定義でも有効です。
    #;(display (string-append
              (number->string num)
              "ですよ\n"))
    (loop (add1 num))))


[PR]
by tempurature | 2015-12-04 03:25 | scheme
【racket】REALM OF RACKETの中身
REALM OF RACKETを2章までがんばって読んで、もしやと思い、残りのページをペラ見すると、HtDPとほぼ同じ内容であることがわかりました。

HtDPは、Web上に公開されているので、それを見ればいいと思います。


racketは、子供にプログラミングを教えるにはどうすればよいかという観点から始まっているようです。なので、プログラミングのつまづきがなくなるように、初心者に非常に丁寧に説明し、かつ、教材のようなライブラリも充実しています(ティーチパック)。

しかし、実用面で考えると、racketを実用的に使うための書籍がないことにがっかりします。公式のドキュメンテーションよりわかりやすい解説がないのです。

racketはLGPLであるし、どことなくアカデミック臭がします。

nutshellの使い勝手が半端ないし、haskellにしようかな〜


[PR]
by tempurature | 2015-12-03 00:19 | scheme
【racket】ゲス乙女ならぬ・・・
REALM OF RACKETのまえがき(Preface)、xvi項に次の文言があります。

[Can I Skip Chapters?]

You might think you can skip ahead and save Chad right away, but we highly recommend that you read this book from front to back. Each chapter depends on the knowledge you learned from the previous one, and we don't want you to miss out on any of Chad's adventures.

<<ブログ主による訳>>

[飛ばし読みできる?]

とっとと前に進んでチャド(この本の主人公)を救いたいと思うかもしれない。けれどもこの本を全部通しで読むことを強くおすすめする。各章はその前の章の知識を前提としているし、チャドの冒険をどれも見逃さないで欲しいのだ。


なんですけど、第2章のテーマが「The Guess My Number Game」。恐ろしく飛ばしてぇぇぇ〜〜〜


ちなみに、1章まではこんな感じです。

・Introduction : Lispうんちく。おもろい
・Chapter 1 : なんとなく使っていたDrRacketについてのまじめな説明。読む必要は、う〜ん。短いし読めば〜


[PR]
by tempurature | 2015-12-02 21:04 | scheme
Dr. Racketって...
Dr. Racketって、「ラケット医師」って意味じゃなくて、「ラケット博士」って意味だったんですね。REALM OF RACKETのDr. Racket像を見て気付きました。
[PR]
by tempurature | 2015-12-01 23:09 | scheme
【racket】英単語学習ソフトを作ってみた
せっかく英語の本を読んでいるので、英単語を学習するための簡単なソフトを作ってみました。

#lang racket

(display "Welcome to English word quiz!!\n")

(define *database*
  `("freshmen" "新人、一年生"
    "sophomore" "二年生"
    "expedition" "遠征"
    "novice" "初心者、未熟者"
    "engage" "従事する、携わる"
    "inquisitive" "そんなに根掘り葉掘り聞きたがるな/Don't be so ___."))

(define (loop rest)
  (unless (null? rest)
    (display (second rest))
    (if (equal? (read-line) (first rest))
        (display "Good!!\n")
        (display (string-append "Boo!! " (first rest) "\n")))
    (loop (cddr rest))))
(loop *database*)

(display "It's end. Good Job!!")


[PR]
by tempurature | 2015-12-01 22:10 | scheme
【racket】REALM OF RACKETを入手しました
c0364169_20384572.jpg
LAND OF LISPと同じ人が書いた本らしいです。とはいえ、racketの中心メンバーが数多く共著に名を連ねています。本の挿絵もLAND OF LISPとは違うのが入っていて、楽しめるようになっています。

本の巻頭には、なんと、ジョン・マッカーシーの似顔絵がドーン!!

「プログラミングGauche」と「Learn You a Haskell for a Great Good!!」と、どれ読むかすごく悩みます。

(ちなみにrealmはレルムと読むらしいですよ)

[PR]
by tempurature | 2015-12-01 20:56 | scheme
【racket】テキストエディタ画面を作成する
racketでテキストエディタ画面を表示するプログラムを作成しました。

c0364169_23311554.png
フォントは「MS ゴシック, 12pt」です。racketでフォントを設定するのは、苦労しましたがなんとかできました。

racoでコンパイルすると、exeファイルを作成してくれますが、実行ファイルのサイズが9MBにもなってしまいました。

【ソースコード】

#lang racket

(require racket/gui)

; definitions

(define *app-name* "textbox")

; body

(define style-list (new style-list%))
(define delta (make-object style-delta% 'change-size 12))
(send delta set-face "MS Gothic")
(send style-list new-named-style "Standard"
      (send the-style-list basic-style))
(define my-standard-style (send style-list find-named-style "Standard"))
(send my-standard-style set-delta delta)

(define frame (new frame% [label *app-name*] [width 300] [height 300]))
(define canvas (new editor-canvas% [parent frame]))
(define text (new text%))
(send text set-style-list style-list)
(send canvas set-editor text)

(send frame show #t)

[PR]
by tempurature | 2015-11-23 23:39 | scheme
【racket】世界のナベアツのネタをプログラムで再現しました
「プログラミングGauche」という本を中古で購入しました。
今は絶版になっているようです。

その本の、68ページの練習問題に触発されて、世界のナベアツのネタをプログラムで再現してみました。

[ソースコード]

#lang racket

(define (hiragana-exp num)
  (cond ((<= num 10)
         (list-ref '("ぜろ" "いち" "に" "さん" "し" "ご"
                     "ろく" "なな" "はち" "きゅう" "じゅう") num))
        ((<= num 19) (string-append "じゅう" (hiragana-exp (- num 10))))
        ((and (<= num 99) (zero? (remainder num 10)))
         (string-append (hiragana-exp (quotient num 10)) "じゅう"))
        ((<= num 99) (string-append (hiragana-exp (* (quotient num 10) 10))
                                    (hiragana-exp (remainder num 10))))
        ((= num 100) "ひゃく")
        ((and (<= num 999) (zero? (remainder num 100)))
         (string-append (hiragana-exp (quotient num 100)) "ひゃく"))
        ((<= num 999) (string-append (hiragana-exp (* (quotient num 100) 100))
                                     (hiragana-exp (remainder num 100))))
        (#t "たくさん")))

(define hiragana-matrix
  '("あかさたなはまやらわん"
    "いきしちにひみ り  "
    "うくすつぬふむゆる  "
    "えけせてねへめ れ  "
    "おこそとのほもよろ  "))

(define (stressed-hiragana-exp num)
  (let* ((hexp (hiragana-exp num))
         (tail (~a (string-ref hexp (sub1 (string-length hexp))))))
    (string-append
      hexp
      (cond
        ((equal? tail "ん") "っ")
        ((regexp-match tail (list-ref hiragana-matrix 0)) "ぁ")
        ((regexp-match tail (list-ref hiragana-matrix 1)) "ぃ")
        ((regexp-match tail (list-ref hiragana-matrix 2)) "ぅ")
        ((regexp-match tail (list-ref hiragana-matrix 3)) "ぇ")
        ((regexp-match tail (list-ref hiragana-matrix 4)) "ぉ")
        (#t "っ")))))

(define (nabeatsu-function num)
  (or (= (remainder num 3) 0)
      (regexp-match "3" (~a num))))

(define (nabeatsu-print num)
  (if (nabeatsu-function num) (stressed-hiragana-exp num) (~a num)))

[出力例]

> (string-join (map nabeatsu-print (range 1 100)) " ")
"1 2 さんっ 4 5 ろくぅ 7 8 きゅうぅ 10 11 じゅうにぃ じゅうさんっ 14 じゅうごっ 16 17 じゅうはちぃ 19 20 にじゅういちぃ 22 にじゅうさんっ にじゅうしぃ 25 26 にじゅうななぁ 28 29 さんじゅうぅ さんじゅういちぃ さんじゅうにぃ さんじゅうさんっ さんじゅうしぃ さんじゅうごっ さんじゅうろくぅ さんじゅうななぁ さんじゅうはちぃ さんじゅうきゅうぅ 40 41 しじゅうにぃ しじゅうさんっ 44 しじゅうごっ 46 47 しじゅうはちぃ 49 50 ごじゅういちぃ 52 ごじゅうさんっ ごじゅうしぃ 55 56 ごじゅうななぁ 58 59 ろくじゅうぅ 61 62 ろくじゅうさんっ 64 65 ろくじゅうろくぅ 67 68 ろくじゅうきゅうぅ 70 71 ななじゅうにぃ ななじゅうさんっ 74 ななじゅうごっ 76 77 ななじゅうはちぃ 79 80 はちじゅういちぃ 82 はちじゅうさんっ はちじゅうしぃ 85 86 はちじゅうななぁ 88 89 きゅうじゅうぅ 91 92 きゅうじゅうさんっ 94 95 きゅうじゅうろくぅ 97 98 きゅうじゅうきゅうぅ"


[PR]
by tempurature | 2015-11-01 20:40 | scheme
【racket】ソーシャルゲームのAP充電時間を計算するスクリプト
#!/usr/local/bin/racket
#lang racket/base

(require racket/format)

(define ap-unit-time 5) ; in minute

(define (print-usage)
  (map (lambda (str) (printf "~a\n" str))
       '("Usage: ap-charging-time.rkts [current-ap] [max-ap]"
         "Calculates \"AP\" charging time of social games")))

(unless (= (vector-length (current-command-line-arguments)) 2)
        (print-usage)
        (exit 1))
(define current-ap
  (string->number
    (vector-ref (current-command-line-arguments) 0)))
(define max-ap
  (string->number
    (vector-ref (current-command-line-arguments) 1)))
(when (or (not (integer? current-ap))
          (not (integer? max-ap)))
      (print-usage)
      (exit 1))

(define total
  (* (- max-ap current-ap) ap-unit-time))
(define minute 
  (remainder total 60))
(define hour
  (remainder (quotient total 60) 24))
(define day
  (quotient total (* 60 24)))

(define (%02d num)
  (~a #:min-width 2 #:align 'right #:pad-string "0" num))

(printf "rest time: ")
(unless (zero? day) (printf "%d day(s), " day))
(printf (string-append (%02d hour) ":" (%02d minute) "\n"))


[PR]
by tempurature | 2015-10-21 00:27 | scheme