まだ無名の風景たち

そしてその情景

Common Lispでリレーションの勉強 1.リレーションを作成する関数を作る

リレーションの勉強を兼ねて自分なりに何かプログラムを作ってみる。

Common Lispが好きなので、Lispでやる。

リレーションには、見出しと本体がある。

すなわち、リレーションは、

リレーション = 見出し + 本体

と考えてよいだろう。

これをLispで扱うとき、どのように表現すべきだろう。

Lispといえばリストなので、やはりリストでリレーションを表現するようにしたい。

直感的に、

(cons attribute body)

って表現すればいいんじゃない?って思う。

リストの図で表現するとこんな感じだろうか。

f:id:hitsuji123:20170722155059p:plain

「なんだ、簡単じゃん」と思って、下記のようなコードを書いてREPLで試してみる。

consの引数1に見出しのリストを、引数2に本体のリストを渡せばOKのはずだ。

CL-USER> (cons '(id name password) '( (1 "bob" "bob1234") (2 "alice" "0002")))
( (ID NAME PASSWORD) (1 "bob" "bob1234") (2 "alice" "0002"))

「あれ?思っていた結果と違う」

俺が欲しかったのはこんなリストだ。

( (ID NAME PASSWORD) ( (1 "bob" "bob123") (2 "alice" "0002")))

何か間違っているらしい。 

リスト( (ID NAME PASSWORD) ( 1 "bob" "bob1234") ( 2 "alice" "0002"))を図で表現すると、下記のようになる。

f:id:hitsuji123:20170722164327p:plain

 ふむ・・・。本来は下記の図のようになって欲しかった。

f:id:hitsuji123:20170722164655p:plain

このようにするには、

(cons attribute (cons body nil))

 とすれば良いのでは。実際にREPLで試してみる。

 CL-USER> (cons '(id name password) (cons '( ( 1 "bob" "bob123") ( 2 "alice" "0002")) nil))
( (ID NAME PASSWORD) ( (1 "bob" "bob123") (2 "alice" "0002")))

 OKだ。てなわけでリレーションを作る関数を定義する。

(defun make-relation (attribute body)
     (cons attribute (cons body nil)))

CL-USER> (make-relation '(id name password) '((1 "bob" "bob123") (2 "alice" "0002")))
((ID NAME PASSWORD) ((1 "bob" "bob123") (2 "alice" "0002"))) 

うん。シンプルだし、なかなか悪くないんじゃない?

てか、はてなLisp投稿するの面倒だな・・。

仕事メモ

 ・なぜ自分の設計に自信が持てないんだろう?

解決策としては他人に精査してもらうことだ。ひとりだから悩んでしまう。

 

・なぜ不安を感じるのだろう?

今後控えている作業にたいして、感覚的に過大評価しているのかも。重要なのは、作業にどれくらいかかるかを、あくまで定量的に把握することだ。じっさいにどれくらいかかったか、計ってみよう。

 

・不安なことがあって前に進めない

不安に感じるところがあっても、一回その感情を切り離して、今の目的を達成することを目標とせよ。不安な点はのちのち考慮すればいい。

 

・感覚について

僕の経験から言うと、感覚というのはかなり万能だ。感覚は導き手である。でも、それをうまく扱うことが難しい。乗りこなせず、飲まれてしまう。

 

・開発者が一回話したことを忘れている

コミュニケーションをするのを先延ばしにしてしまっていないか。

全体像を伝え忘れてないか。

伝えるべきことが、はじめに伝わっておらず、終わりごろに気づくようになっていないか。

コミュニケーションは基本「いますぐ」やる。

「あなたは誠実で優しい人だから、きっといいことがあるよ」

 出会う女性が僕にこの言葉をかけるのは何回目だろう。

 就活で言うところのお祈りメールみたいなものなんだろうな。

 

 思い出してみても、自分はいつもいい人どまりのことが多かった気がする。
 誠実で優しくしてるのが僕のアピールなんだけど、この結果を見る限り、周りの人にとって別段なんでもないことらしい。
 空気か水みたいなものなんだろう。

 

 世の中、積極的で、強引な人間のものなんだろうな。周囲を見渡しても、結婚するなり、仕事で成功してる人間はみんなそうだ。

 俺はそういうタイプじゃないな。

 

 さあ、これからどうやって生きていこうか。

 

「あなたは誠実で優しい人だから、きっといいことがあるよ」

 

 なんだか俺はこれからもずっとこの言葉を聞き続けるような予感がした。