fu7mu4’s diary

はてなダイアリーから移転しました。

exercism.io の common lisp にチャレンジしてみた

clozure cl /Emacs/Mac OS X環境で exercism.io のcommon lispにチャレンジした。
quicklisp はインストール済み。


exercism-mac-64bit.tgz を解凍して、~/binに移動する。

tar -zxvf exercism-mac-64bit.tgz
mv exercism ~/bin/

API KEYは、アカウントのページにある。これをコピーして設定する。

exercism configure --key=KEYKEYKEY.....

問題を取得する。

exercism fetch

デフォルトでは、ホームディレクトリの下に exercism というフォルダを作成してそこに問題をおいてくれるようだ。

New: 19 problems
Bob (clojure) /Users/fu7mu4/exercism/clojure/bob
Bob (coffeescript) /Users/fu7mu4/exercism/coffeescript/bob
Bob (cpp) /Users/fu7mu4/exercism/cpp/bob
Leap (csharp) /Users/fu7mu4/exercism/csharp/leap
Bob (elixir) /Users/fu7mu4/exercism/elixir/bob
Leap (erlang) /Users/fu7mu4/exercism/erlang/leap
Sum Of Multiples (fsharp) /Users/fu7mu4/exercism/fsharp/sum-of-multiples
Leap (go) /Users/fu7mu4/exercism/go/leap
Leap (haskell) /Users/fu7mu4/exercism/haskell/leap
Bob (javascript) /Users/fu7mu4/exercism/javascript/bob
Point Mutations (lisp) /Users/fu7mu4/exercism/lisp/point-mutations
Hamming (lua) /Users/fu7mu4/exercism/lua/hamming
Bob (objective-c) /Users/fu7mu4/exercism/objective-c/bob
Bob (ocaml) /Users/fu7mu4/exercism/ocaml/bob
Bob (perl5) /Users/fu7mu4/exercism/perl5/bob
Bob (python) /Users/fu7mu4/exercism/python/bob
Hamming (ruby) /Users/fu7mu4/exercism/ruby/hamming
Bob (scala) /Users/fu7mu4/exercism/scala/bob
Leap (swift) /Users/fu7mu4/exercism/swift/leap

cd ~/exercism/lisp/point-mutations
ls

README.md
dna.lisp
point-mutations-test.lisp

これで問題がゲットできた。

Emacs で slime を起動して quicklisp で lisp-unit を呼びこむ。

(ql:quickload "lisp-unit")
(ccl:cwd "~/exercism/lisp/point-mutations/")

この辺で問題をよんで、dna.lispを編集する。
それで、ここでユリ裁判。

(load "dna")
(load "point-mutations-test.lisp")

あ、失敗らしい。

To load "lisp-unit":
Load 1 ASDF system:
lisp-unit
; Loading "lisp-unit"

LARGER-DISTANCE: 1 assertions passed, 0 failed.

NO-DIFFERENCE-BETWEEN-IDENTICAL-STRANDS: 1 assertions passed, 0 failed.

| Failed Form: (DNA:HAMMING-DISTANCE "AGG" "AGACAACAGCCAGCCGCCGGATT")
| Expected NIL but saw 1
|
| Failed Form: (DNA:HAMMING-DISTANCE "AGACAACAGCCAGCCGCCGGATT" "AGACATCTTTCAGCCGCCGGATTAGGCAA")
| Expected NIL but saw 4
|
| Failed Form: (DNA:HAMMING-DISTANCE "AGACAACAGCCAGCCGCCGGATT" "AGGCAA")
| Expected NIL but saw 18
|
INVALID-TO-GET-DISTANCE-FOR-DIFFERENT-LENGTH-STRINGS: 0 assertions passed, 3 failed.

SMALL-HAMMING-DISTANCE-IN-MIDDLE-SOMEWHERE: 1 assertions passed, 0 failed.

NO-DIFFERENCE-BETWEEN-EMPTY-STRANDS: 1 assertions passed, 0 failed.

COMPLETE-HAMMING-DISTANCE-IN-SMALL-STRAND: 1 assertions passed, 0 failed.

Unit Test Summary
| 8 assertions total
| 5 passed
| 3 failed
| 0 execution errors
| 0 missing tests

ま、こんなものでしょう。

ちょっと誤解していた。長さが違ったらnilを返さないといけないのか。


なお、解けたらこうやって回答を送信して、

exercism submit ~/exercism/lisp/point-mutations/dna.lisp

次の問題をゲットする。

exercism fetch