とりとめのないことを書いております。
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 ) タグの人気記事
らららラケットプログラミング / Lalala, racket programming!!
ラケットプログラミングをエンジョイするためのロゴが頭にうかびました。これはひどい(笑)

c0364169_03310654.png

[PR]
by tempurature | 2015-10-08 03:33 | scheme
【決定版】どうしてracketは流行らないのか?
一重にライセンス形態に問題があると思います。

Racket : LGPL
Clojure : Eclipse Public License
Gauche : BSD License

LGPLで商業製品をリリースするのはGPLほどではありませんが、あまり良い選択肢とはいえないかもしれません。
(そこら辺の事情は「LGPL 商用」で検索すると詳しく書いてあります)

RacketはグラフィックやWeb系のライブラリが充実しているので、非常に使いやすいですが、これらはLGPLのライブラリを援用しているためと推測できます。したがって、例えばracketのBSD実装をするのは意外にハードルが高いように思います。

なので開発環境が貧弱でもClojureやGaucheがもてはやされるのではないかと考えるのです。


[PR]
by tempurature | 2015-09-28 00:23 | scheme
【racket】Cygwinでracketを実行する方法
1. DrRacketのインストールディレクトリを確認します。

デフォルトでは、C:\Program Files\Racketになっているはずです。

2. Cygwin上の認識名を確認します。

Cygwinでは、C:\は/cygdrive/c/というパスなので、
C:\Program Files\Racketというパスは、/cygdrive/c/Program Files/Racketになります。実際にCygwinのターミナルでDrRacketのパスまでたどってみます。
Program Filesのように半角スペースが入っているディレクトリ名は、シングルスペース(')かダブルスペース(")でくくります。

$ cd /cygdrive/c
$ cd 'Program Files'
$ cd Racket
$ pwd
/cygdrive/c/Program Files/Racket
$ ls
collects          mred-text.exe   plt-r6rs.exe              share
doc               mzc.exe         plt-web-server.exe        slatex.exe
DrRacket.exe      mzpp.exe        Racket Documentation.exe  Slideshow.exe
etc               mzscheme.exe    Racket.exe                swindle.exe
GRacket.exe       mztext.exe      raco.exe                  Uninstall.exe
gracket-text.exe  pdf-slatex.exe  README.txt
include           PLT Games.exe   scribble.exe
lib               plt-r5rs.exe    setup-plt.exe

3. /usr/local/binにRacket.exe, DrRacket.exe, raco.exeのシンボリックリンクを張ります。

$ ln -s '/cygdrive/c/Program Files/Racket/Racket.exe' /usr/local/bin/racket
$ ln -s '/cygdrive/c/Program Files/Racket/DrRacket.exe' /usr/local/bin/drracket
$ ln -s '/cygdrive/c/Program Files/Racket/raco.exe' /usr/local/bin/raco
$ ls /usr/local/bin
drracket racket raco

4. /usr/local/binにパスが通っていることを確認します。

$ perl -e 'if (":$ARGV[0]:" =~ m|:/usr/local/bin/{0,1}:|) {print "OK\n";}' $PATH
OK

手順は以上です。


Cygwinでracketを使うメリットとしては、racketスクリプトがあります。
racketスクリプトは、拡張子が.rktsで、次のようにshebangを書きます。

#!/usr/local/bin/racket

shebangを半角スペースを含むパスに適用するとうまく行かないのですが、上記の方法ではうまく行きます。


[PR]
by tempurature | 2015-09-20 18:30 | scheme
【racket】中居のミになる図書館で紹介されていたソウルナンバーを求める関数
簡単そうなので作ってみました。2時間かかって夜更かしになってしまったので、少し後悔してます。

#lang racket

(define (substring-all str)
  (map (lambda (i) (substring str i (add1 i))) (range (string-length str))))
(define (str-sum str)
  (apply + (map string->number (substring-all str))))
(define (accumulate enough? go-next init)
  (if (enough? init) init (accumulate enough? go-next (go-next init))))

(define (solve-soul-number date)
  (let* ((r (regexp-match #px"([0-9]{4})\\/([0-9]{1,2})\\/([0-9]{1,2})" date))
         (s (apply + (map str-sum (rest r)))))
    (accumulate (lambda (n) (< n 10))
                (lambda (n) (str-sum (number->string n)))
                s)))


[PR]
by tempurature | 2015-09-16 01:06 | scheme
800x600の画面でDr. Racketの言語を切り替える方法
chromebookでChromeリモートデスクトップなどを使用する際、chromebookの画面解像度の都合上、リモートPCの解像度は800x600に設定しています。

そうするとVS, Eclipseなどを使う場合には多分に使い勝手が悪いのですが、Dr. Racketを使う分にはこれで間に合っています。

ただ、Dr. Racketでracketのコードを書きたくて、SICPも勉強したい人は次のウィンドウに悩まされるはずです。

c0364169_15524334.png
Dr. Racketのメニューバーから[Language] - [Choose Language]を選択して
表示されるウィンドウ

なんとこのウィンドウはOther Languagesを選択すると下に伸びます。

c0364169_15561202.png
ここで私なんかはまごついてしまうのですが、次のようにすればうまくいきます。

  • racket選択時:[The Racket Language]を選択して、Enterキーを押す。
  • R5RS選択時:[Other Languages]を選択して、[R5RS]をダブルクリックする。


[PR]
by tempurature | 2015-08-17 16:00 | プログラミング
【racket】電卓サンプル
racketで電卓サンプル作りました。ソースコードは240行あります。

c0364169_01053595.png
<github>



[PR]
by tempurature | 2015-08-14 01:07 | scheme
【racket】graphing-calculator
racketで定石のプログラムを書きたいということで他のプログラマのコードを参考にしていきたいです。

電卓プログラムを探していましたが、面白いのを見つけましたので紹介します。

c0364169_00104549.png
関数を入力すると、グラフをプロットしてくれるプログラムです。
Makefileからビルドするために、Ubuntuで実行しました。

<github>

<作者>
Spencer Florence

<ソースコードの行数>
2 calc.rkt
43 graph.rkt
125 gui.rkt
84 parser.rkt
254 total



[PR]
by tempurature | 2015-08-03 00:17 | scheme
Ubuntu 15.04にracketをインストール
Dr. RacketはUbuntuソフトウェアセンターに登録されているのですぐにインストールすることができます。
c0364169_15043661.png
Dr. Racketの画面。Windows版と変わりません。
c0364169_15073129.png
メインウィンドウはWindows版と変わらないのですが、
アイコンがよく見るとフォルダ。残念です。


racoというコマンドも端末上からすぐ使うことができます。

c0364169_15130174.png



[PR]
by tempurature | 2015-08-02 15:14 | scheme
【恐怖】Dr. Racketの起動画面
Racketを使っている人には、Dr. Racketの起動画面はおなじみだと思います。

c0364169_20542563.png
でも、このウィンドウにカーソルを合わせると・・・

c0364169_20545702.png
ギャャャャャァァァーーー


lisperあたまおかしいって、ホントかもしれないです。


[PR]
by tempurature | 2015-07-30 20:58 | scheme
どうしてracketは流行らないのか?
私のより新しい意見はこちらになります。



racketは、PLTというグループが開発するlisp系言語です。racketはもともとPLT schemeという名前で、scheme実装の1つでしたが、schemeとCommon Lispを踏まえた新しいlispを作るという目標のもとに分化しました。

racketの1番の特徴は、windows, macOS, linuxで使えるGUIベースの開発環境 Dr. Racketであり、Common Lisp, Schemeではこれほど簡単に導入することができる環境は私の知る限りではないです。

とはいえ、日本ではracketはほとんど知られておらず、アメリカでもCommon Lisp, Schemeほどの人気はない言語です。

現在私が知る限りにおいて、なぜracketが流行っていないのかを考えてみます。


< 1 > racketの実装は実行速度が遅い

lispのコミュニティの中では、schemeに比べてracketの実行速度が遅いという評判です。実際そうなのか私自身把握しているわけでなないですが、そういう書き込みは見ています。

< 2 > 枯れた言語ではない

C, scheme, Common Lispなどは古い言語なので、ドキュメントやライブラリが充実しています。また、仕様変更が頻繁におこらないので、レガシー資産を使うことができ、また、自分の書いたコードを10年後にも使えるだろうという安心感もあります。

pythonやphpなどは人気のある言語ですが、現在も言語の仕様変更が行われているのでコードの寿命が短いという問題があります。racketも生まれたばかりの言語なので同様の問題が発生します。

< 3 > lispの慣用とは異なる

racketはschemeとほぼ同じような言語仕様ですが、scheme, Common Lispとは相容れないような違いがあります。

・識別子(identifier)は大文字と小文字を区別する

scheme, Common Lispでは大文字・小文字を区別しないので、lisperが大文字の名前と小文字の名前を使っているracketコードを見ると混乱します。

・文字コードはunicode

schemeやCommon Lispでは独特の文字列処理体系を持っていますが、racketではpythonやDに似たunicodeによる文字列処理を行っています。

これらの特徴は、lispを他の言語と併用しようと考えた場合には長所となります。racketはモダン言語の1つとしてのポテンシャルは持っていると思います。

< 4 > 実装の種類が少ない

scheme, Common Lispは商用、非商用の実装が多数あり、実行速度や拡張機能などのニーズで色々な実装を試すことができます。racketはPLTで配布している実装だけなので、素人向けではありますが、プロ向けではないのだと思います。



racketはscheme, Common Lispに比べて日本語の情報が少ないですが、導入の手軽さでは群を抜いており、GUI, webサーバー, 3Dグラフィックスのライブラリも一通り揃ってますので、趣味のプログラミング用途では一押しです。

racketが有用であるかどうかは難しいところですが、racketの日本語の情報を提供することで、多くの人が言語に関してより正しい選択ができるようにしていけたらと考えています。


[PR]
by tempurature | 2015-07-26 16:08 | scheme