「lambda」を含む日記 RSS

はてなキーワード: lambdaとは

2019-04-28

anond:20190428003157

Cはシンプルなので始めるには良い言語

キャリアプランがはっきりしてるなら最初からwebプログラマになりたい」とか言ってもらえると、

「じゃあawslambdaphp書いてみようぜ」とか言えなくもない。

2019-03-14

anond:20190314093211

もうお互いが今夜相手とのセックスOKにチェック入れたら通知が来る機能LINEにつけてくれ。

LINE じゃないけどこれ実装して使ってるよ。AWS Lambda, DynamoDB バックエンドにして、React で簡単UI つけてる。お互いが24時間以内に ❤️ボタンを押した時だけ表示が変わる。やろうと思えば slack 連携もできる。

CloudFormation テンプレートしかったらあげるよ。

2019-02-01

ハンガリアン記法

やっぱりあれは高性能なIDEがある前提じゃね

最近AWS lambdaでちょこちょこ書いてる事が多いから、ほぼただのテキストエディタIDEじゃないのでハンガリアン記法じゃないとやってられないわ

2018-11-18

SIer若いSEがまるで老害のようだった

全然難しくないシステム改修案件。

お客さんとこで動いてる古い社内システム商品売上関連のTSVファイル毎日吐き出される→それを新しく使う事になったCRMからチェックできるS3バケットへ入れて欲しい、というだけ。

ファイルサイズも大きくないかLambda使ってバケットへ入れられるよ、1日1回だしそっちのほうが安上がりだよ、って提案したのに。

そのお客さんと長い付き合いがあるSIer若いSEさんがLambdaわからんとかでSIer系列サーバサービス会社仮装サーバセットアップしてcronでバッチ動かす事になりましたよ。

俺より若いのに老害すぎるよ。

2018-11-03

退職しました

近年、転職した時に退職しましたブログを書くのが流行りのようなので書いてみる。

転職しようか悩んでいるシステムエンジニアの人がいたら参考になれば。

ということで当方システムエンジニア歴約20年のおっさんだ。

ずっと小さいベンチャー企業渡り歩いているせいで、インフラからバックエンドからフロントエンドからなんでもフルスタックでやってきた(人がいなさすぎてやらざるを得なかった)。

近年は自分も開発しながらマネジメントもするプレイングマネージャだった。

社名を出す勇気はないので出さないが、まあまあ有名なWebサービスをやっている非上場企業から、ある業界で手広くいろいろやっている一部上場企業転職した。

2社の業界は全く違う。

社員数、年商10倍くらいになった。

年収現状維持で変わらずに転職したのだが、これは自分にとってかなり上出来。

というのも前の会社が小さいベンチャー企業で、CTO的な立場役員に気に入られていたこともあって、相場よりも大分高い給与をもらっていた。

なので、中規模以上の企業基準ではこの年収では無理ではないかと考えていた。

というか実際それが理由で最終選考で断られた別の中規模企業もあった。

「当社基準で考えると希望年収が高すぎる」と。

元が小さい企業というのも、大中規模企業への転職には足かせになった。

小さい企業のため、チームがせいぜい10名程度になるため、「PM経験あります!」とアピールしても、「10名程度じゃね〜」と軽く見られて響かないのだ。

エージェントを使って転職活動したのだが、そういうことはやる前から予測していたので、ダメ元で大中規模の有名企業を受けてみて、ダメなら有望なベンチャー企業を受けてみる、くらいに考えていた。

そしたら運良く経験スキルセットがぴったりハマる企業タイミング良くみつかり、1次面接でほぼ内定な感じでさらりと決まった。

で、なぜ大中規模の有名企業を志望したかというと、小さいベンチャー企業疲れたのとそろそろある程度安定した環境で働きたくなったからだ。

小さいベンチャー企業は本当に波が大きい。

上手くいっているときは高級ホテルで盛大なパーティー開いちゃったりするくらい羽振りが良いが、ちょっとつまずくとすぐ単月で赤字決算になる。

大体主力業務1本でやってるから、その一つコケると会社全体が存続の危機になってしまう。

そうして経営危機を迎えると、「ここままではダメだ!会社に変革を!新しいことに挑戦しよう!」と会社空気がなるのだが、「そうはいってもこれ以上悪くしたくない」という役員保守的気持ちも働いて、結局「失敗しないように挑戦しろ」というそれってつまり挑戦じゃないよねこれまで通りってことだよねっていうがっかりな指令がでて、やる気のある社員モチベーションを下げる。

そうなるとスキルとやる気のある社員から抜けていくのは自明の理だ。

私もその一人だ。

前の会社上層部営業チームが占めているせいで、売上至上主義会社だった。

そのため、ユーザビリティシステム堅牢性などは全く関心がなく、10年前のシステムが現役で動いているような有様だ。

少し前まではそれでもなんとかなっていたが、近年になりついにユーザGoogleに見放されてしまった。

システム革新して良いサービス提供する競合他社に取られ始めたのだ。ユーザSEOも。

役員SEOコンサルを使ってシステム的に小細工すればSEOは取り返せると信じているようだが、それは10年前のSEO対策だ。

下手なことをするとスパムと見なされてもっと悪くなるよとは伝えはしたが、適当にいい加減なことを言うSEOコンサルを盲信していて、聞く耳は持ってもらえなかった。

そんな会社だが、ある程度自由やらせてくれる風土もあったので、俺が担当しているところはどんどん勝手に新技術を取り入れていった。

事前に確認取るとOKでるのに時間かかったり、NGになったりするので、本当に勝手に作って、事後報告してた。

AWS上でReact+RoRWebアプリを立ち上げ、ElastiCache、ElasticSearchなどなるべくAWSサービスを使ってクラウドネイティブで動くようにした。

APIAPI GatewayLambdaサーバレスで動くようにした。

AWSに関して教えてくれる人は社内にはもちろんいないので、全て独学で習得した。

この行動が良かった。

この経験のおかげで、今回の転職ができたのは間違いない。

もし前の会社会社に言われた仕事だけしていたら、今頃どこにも転職できないしょうもないおっさんエンジニアになっていただろう。

からベンチャー企業への転職を考えているエンジニアは、いつまでもそこにいれるとは思わないでほしい。

そしていつでも転職できるように武器を持ってほしい。

会社エンジニアとして成長できる機会がないのであれば、自分から作っていかないといけない。

そして、会社方針自分の考え方が一致していることはとても大事だ。

それが違うと、経営危機の時に頑張ろうって気になれない。

転職するとき面接は、受けるこちらも会社査定する場なので、その辺も良くみてほしい。

転職する気がない人もたまに転職活動してみるのを薦める。

業界全体において今自分がどの位置にいてどのくらいの価値のある人間なのかわかるからだ。

まず職務経歴書を書いてみてほしい。

「俺の職務経歴書、魅力薄っ!」って自身で感じたら、会社生き方を変えるべきだ。

2018-05-26

英語で読まないと恥ずかしいor英語で読むと恥ずかしい

heightをヘイトと読んでたり、lambdaラムブダとか読んでたりする人が恥ずかしいのは分かる。

ただ、日本語の中で外来語が使われる時に読みが変わるのはよくある話ではないかとも思う。

例えばGoogleをグーゴゥと発音する人は居ないし、Appleをェアポゥと発音する人は居ないだろう。むしろそう読んでたほうが恥ずかしい人扱いされかねない。

この「英語で読まないと恥ずかしい単語」と「英語で読むと恥ずかしい単語」の境目はどこにあるんだろう。

2018-03-20

anond:20180320033921

えぇ。。。まじだよ。。。

それっぽいん単語出したら信じてくれないか

docker-composeを使ってGolangMysqlイメージ使っていつも開発してぞ

好きなエディタ学生無料で使えるIntelliJ IDEAでgoLand をよく使ってる。

Gitだってブランチ切ったりアドコミットプッシュくらいでGitHubを使ってプルリク系の開発をチームでしたりもした。

AWSインスタンス立てたりロードバランサつけてインタンンス二つに流したり、CDNさしたりもできる

いうてCDNの設定とかドメインの設定だけでラクチンなんだけどね。

あ、あと最近サーバーレスにはまっててaws lambdaをserverlesって言うツール使ってデプロイとかしてる。

これだけ言えば本当にエンジニアだってわかるよなぁ?

テストとかも書いたことあるからモックとかも当然理解してる

2018-02-25

pythonって一貫性なさすぎじゃない?

いや、実用的で素晴らしい言語だと思うよ。

でもさ、なんか一貫性が無いように感じるんだよね。

まず、言語の大半の部分がオブジェクト指向言語っぽいデザインになってるのに、listの要素数を測る手段len()って*関数*なのはどうなの?

(しか略語って...)

a = [1, 2, 3]
len(a)  # 3

他にもあるよ! pythonくんのアレな所

俺は、sortとsortedって言う命名からこの挙動をまったく予測できなかった。

  • 破壊的変更をする list.sort()
a = [1, 3, 2]
a.sort()  # None
a  # [1, 2, 3]
sorted([1, 3, 2])  # [1, 2, 3]

しかもsortedにdictを渡すとkeyがlistに変換されてソートされて返ってくる。

コードリーダビティに関する本を開けば、どの本にだって「良い名前選択する」ことの重要性が書かれていると思う。

「sort()が破壊的で、sorted()が非破壊的、sorted()にdictを渡すとkeyのlistがソートされて返ってくる」これって良い命名なのかな?

pythonくんってこう言う所あるよね

配列の要素を文字列連結

", ".join(['1', '2', '4', '8', '16'])  # "1, 2, 4, 8, 16"

えーっ、join()のレシーバー区切り文字って…引くわー

しかも、これに対する「文字列リテラル (文字列定数) のメソッドを使うのは*醜すぎる*」という意見に対しての公式の返答が、これってのも凄い。

かにそうかも知れませんが*文字列リテラルは単なる固定された値に過ぎないというのが答えです。文字列に束縛された名前メソッドが許されるなら、リテラルに使えないようにする論理的理由はないでしょう。

https://docs.python.jp/3/faq/design.html#why-is-join-a-string-method-instead-of-a-list-or-tuple-method

The Zen of Pythonで「醜いより美しい方がいい」って言ってましたやん。

そもそもリテラルかどうかに関係なくstrインスタンスにこのメソッドがある事がおかしいと思った。

なんでpythonくんって一貫性ないの? pythonくん「歴史です」

pythonmap関数として実装されている。(まただよ...)

list(map(lambda x: x*x, [1, 2, 3]))  # [1, 4, 9]

なんでメソッドにしなかったの? って質問に対して公式がこう答えてる。

主な理由歴史です。複数の型に対しての総称的な操作で、対象オブジェクトメソッドを全く持っていなかった (例えば、タプル) としても働くよう意図したもの関数は使われました。

(中略)

個々のケースについては粗探しのしようがありますが、Python の一部であるし、根本的な変更をするには遅すぎます

https://docs.python.jp/3/faq/design.html#why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list

うわー、信じられねぇ…

歴史的経緯があるから一貫性が無いのは仕方ないみたいなこの感じ。

これが設計思想に「醜いより美しい方がいい」を掲げるpython実装なんだねぇ…

pythonくんの良い所

散々pythonの事を悪く言ったけど、おれ実はpythonくんの良い所もいっぱい知ってるんだ。

pythonくんの良い所:

ライブラリが超充実してる!
インデントコードブロック表現する文法クール!
PEP8という規約であるべきコードフォーマットを明示したのが良いよね。
Cythonで高速化楽ちん!
namespaceが使いやすい! デコレーター便利!

美しくない、それゆえに強いプログラミング言語python

The Zen of PythonPython設計思想が色々書いてある。

「醜いより美しいほうがいい」という指針があることはさっき紹介した通りだ。

pythonがそれを体現してるとは、僕にはどうも思えない。

でもThe Zen of Pythonには「Although practicality beats purity.(実用性を求めると純粋さが失われることがある。)」とも書いてある。

pythonはこの設計思想を他の言語には無い高いレベル体現してるとは思う。

pythonは、

節操に色々取り入れた上で、「tupleからメソッドはやせないから、map関数にする」とか、メチャクチャ方法でそれらを統合した言語だ。

だが、そういう言語からこそ、pythonで書いたコードを育てていく中で様々なパラダイムへとシームレスに変化させていく事ができる。

そういう「不純であるがゆえに柔軟性を持ったプログラミング言語pythonだと思う。

ruby純粋性はすごいよ。イカれたくらい徹底されたオブジェクト指向

BaseObjectをrootとする継承のツリーの中に世界のすべてが収まっている。

haskell純粋性も凄い。「代入が無い」プログラミング言語に初めてであった時の衝撃。

でも、そういう純粋性をかなぐり捨てたpythonにはタブーが無い。

不純で醜い、それゆえに強い言語python.

から僕はrubyとの思い出を反芻し、haskellに焦がれながら、明日pythonを選び、書いていく。

2017-11-27

pythonの問題です。100点満点のテストの最低点、平均点、最高点を求めたい。以... - Yahoo!知恵袋

地道に

score_list = []

while True:
    score = int(input())
    if score == -1: break
    score_list.append(score)

print(min(score_list))
print(sum(score_list) // len(score_list))  # // round off
print(max(score_list))


itertools を使って

itertools でこうか... すごい.., これが generator か..

itertools.takewhile の lambda x: x != -1 が False になると

itertools.repeat も yeild を止めるのか..

import itertools
score_list = list(itertools.takewhile(lambda x: x != -1, (int(input()) for i in itertools.repeat(None))))
print(min(score_list), sum(score_list) // len(score_list), max(score_list), sep="\n")

itertools.repeat

itertools.takewhile

PEP 255 -- Simple Generators | Python.org

2017-03-05

サーバーレスって違うよね

WebTorrent的なものだと思ったのにがっかりだよ

AWSLambdaのようなサービスサーバーレスと呼ぶマーケティング奴隷は滅ぶべきだしそれに迎合する脳を持たない権威主義者たちには技術を語る資格はない。

あれは言うとしたらマネージンレスだろう。サーバーレスではない。

おそらく彼らには強いAIと弱いAI区別すらつかないんだろう。

そうだ、百歩譲って弱いサーバーレスと言うなら許す。

2016-12-29

はてブで「Amazon」と検索してみると

昨今話題になってるヤマト佐川関連のブックマークが上位を占めるかと思いきや、まったく違った。

2016年12月29日10:54時点、本文、新着順で検索

Amazon検索結果 (絞り込み: 3 users 以上) 約 3,423 件中 1 - 40 件目 (0.26 秒)

以下略

ECサイト連想させるトピックほとんどなくて、AmazonB2B向けサービスを充実させていることに驚いた。

Amazonって表向きは物流業界革命問題を起こしている要因に挙げられているけど、EC以外のインパクトがどれだけ大きいのか門外漢なので分からない。

↑でブクマ付けた人、何が起きるのか教えて

2016-07-17

Vim実装されたlambdaがクソすぎる

こんなんじゃ実装されてないほうがまし

lambda実装に関わった人達中途半端にしないで最後まで責任持ってよ

2016-05-05

http://anond.hatelabo.jp/20160505160311

増田は気軽に質問できる中・上級者がいない趣味プログラマ学生さんだと仮定

仕事じゃなく自分のためにコード書くのって

モチベーション維持みたいなウェットな話が結構重要なので、

どうしても合う合わないがある。

他人アドバイスもそこを差し引いて聞くといいと思う。

筋肉付けたいとしても、筋トレ無限にできる人と無理な人といるでしょ。そんな感じ。

で、自分オススメは以下の3パターンくらい。

機能必要最低限で自分が欲しいツールサービスを作る

自分の欲しいものをつくる、なんてのは誰でも思いつく話だと思うんだけど、

自分の欲しいものの中で一番機能が少ないものを、ギリギリ最低限の実装でやること。

これが意外と難しい(特に考え過ぎちゃう人はそうだと思う)。

Webサービス系に限ると小物で欲しいものって無さそうなので、

もう少し違うジャンルで作るのがいいと思う。

最近なら自分専用のLINE botかいいんじゃないですかね。

プログラミングコンテストで中級者向け問題くらいまで解く

2番目のプログラミングコンテストは向き不向きが激しいとは思う。

サービスを作るのに比べると短時間で深く集中する感じになるので、これはこれでオススメ

最初AtCoder過去問、AOJ、ProjectEulerあたりを試してみて合いそうか考えるのがいいと思う。

Web系だと仕事に直結はしないかもしれないけど、頭の使い方みたいなところは磨かれるはず。

人材紹介会社が作ってる同種のサービスだと、問題レベル感としてトレーニングには向かない印象。

簡単すぎる問題を解くくらいなら小物作りでも実戦経験を積むべき。

縛りゲー自体目的にする

最後は縛りゲー。つまり、あえて整備されていない道を開拓していく。

いかに金をかけずにWebサービスを公開・維持できるか、というテーマなら

各種サービス無料枠とかAWS Lambdaとかを駆使して頑張るような話。

もしくは、先人が少なめのソフトウェアについて深掘りするとか。

たとえばAtomやVSCodeの自分専用プラグインなら最初オススメ内容にも合う。

人によると思うけど、自分は縛りゲー自体目的になることで新しい知識を獲得できてる気がする。

ときに、最初筋トレの話はわかりにくい喩えかもしれないけど、自分筋トレ派だと思う。

2016-02-26

関数型プログラミングのことは嫌いにならないでください!

高階関数はいいぞ!

lambdaはいいぞ!

ミュータブルはいいぞ!

homoiconicはいいぞ!

マクロはいいぞ!

Clojureはいいぞ!

2015-12-26

pythonでのデータファイル読み込みについてpython初心者です。p... - Yahoo!知恵袋 に対する回答。

 

方法Python ファイルとしてデータ構造も含めてデータを保存する場合

Step1. 次のようなファイル datafile.py を作成します。

# Set your np object in this file.
np = ....

# data
data = [
  [np.array([1,2,3]),np.array([0,1])],
  [np.array([4,5,6]),np.array([2,3])],
  [np.array([7,8,9]),np.array([4,5])],
]

 

Step2. 本体ファイルで datafile.py を呼び出します。

以下、変数 data, np には 上記の内容が、保存されて返ってきます

from datafile import data, np

 

注意: 簡単ですが、この方法場合 datafile.py の中で np オブジェクト定義する必要がありますPHP で言う所の include 的なのがあったら楽なんですけどね〜。

 

方法CSVファイルデータを保存する場合

Step1. 次のようなファイル datafile.csv作成します。

1,2,3,0,1
4,5,6,2,3
7,8,9,4,5

 

Step2. data = [np.array..., np.array... ] としたいところを次のように書き換えます

data = []
e = lambda i: int(c[i])
file = open('datafile.csv')
for line in file:
  c = line.split(',')
  data.append([
    np.array([e[0], e[1], e[2]]),
    np.array([e[3], e[4]])
  ])
file.close

補足 lambda式

2015-08-10

Pythonの条件演算子(三項演算子)に対する2chの反応

580 :デフォルト名無しさん[sage]:2006/07/26(水) 00:33:38

普通に三項演算子 ? : いれた方がよかったんだと思うけど、そうできない理由があったのか?

581 :デフォルト名無しさん[sage]:2006/07/26(水) 00:37:57

>>580

ああすごい同意

なんで三項演算子入れないで、あんなきもい

構文入れるんだよ。

583 :デフォルト名無しさん[sage]:2006/07/26(水) 00:44:31

つか、一種の3項演算子じゃん。

[x for y in z] とかとも類似する構文だし、俺はあれでいいと思うけどなぁ。。。

584 :デフォルト名無しさん[sage]:2006/07/26(水) 00:45:26

>581

入れたくないものを仕方なしに入れるから

とか? (本音を言うと誰にも使って欲しくない)

585 :デフォルト名無しさん[sage]:2006/07/26(水) 00:46:03

? : が既に使われててダメだったなら

C then X else Y

みたいにできなかったのか疑問

条件が真ん中に来るとか見づらいよ……

586 :デフォルト名無しさん[sage]:2006/07/26(水) 00:46:09

別にCに合わせる必要はないと思うよ。演算子関係ではCと違う部分がいっぱいあるから

半端に似せて「Cと同じだ」とか誤解を招くのはよろしくないと思う。

587 :デフォルト名無しさん[sage]:2006/07/26(水) 00:48:42

"x for y in z"

  ←  ←

データの流れが見える

"X if C else Y"

↑      ↑

分かれていて嫌

588 :デフォルト名無しさん[sage]:2006/07/26(水) 00:57:28

>>587

気持ちはわかる。対称性が悪い感じだね。

でももう決まったことだし、個人的にはあまり気にしないで使うことになるだろうな。

意見を述べるならもっと前に言うべきだったってことでしょう。

591 :デフォルト名無しさん[sage]:2006/07/26(水) 01:07:32

初めてリスト内包を見たときは「何じゃこりゃ、ワケわかめ」という印象だったけど

もう慣れてしまった。今ではリスト内包直観的で分かりやすいと感じる。

ずっと Guido のセンスで取捨選択してきたわけだし、ぶっちゃけ今のところこれといって

ダメ杉な仕様とゆーのは思い付かない。

今度の新しい三項演算子も慣れたら普通だと感じるようになるんジャマイカ

592 :デフォルト名無しさん[sage]:2006/07/26(水) 01:13:04

X if C else Y

「Xなんだよ! まあCだったらの話だけどな そうじゃなければYでよろしく」

593 :デフォルト名無しさん[sage]:2006/07/26(水) 01:15:11

このスレ読んでるうちにだんだん慣れてきたw

594 :デフォルト名無しさん[sage]:2006/07/26(水) 01:16:06

リスト内包表記は書いちゃうけど読みにくいな

[x for y in z]

ここにたどり着く前に脳内スタック忘却を始めるw

[x for x in original_list if x>2 and x<5]

こっちは自分で書いてもコメント必要だww

595 :591[sage]:2006/07/26(水) 01:37:07

文が書ける文脈では普通の if 文を使えばいいわけで、

X if C else Y を使うのはきっと式の中がメインになるんだろうな。

lambda の中とかリスト内包の中とか。

functor = lambda x: x+1 if y > 0 else lambda x: x-1 if y < 0 else lambda x: x

とか、

delta = Numeric.array([[1 if i == j else 0 for i in range(M)] for j in range(N)], Numeric.Float32)

みたいな。>>593の言う通り、用例を考えていたらもう慣れてきた希ガス

596 :591[sage]:2006/07/26(水) 01:54:02

q, r = divmod(n, 10)

print "%d%s" % (n, "th" if q == 1 else "st" if r == 1 else "nd" if r == 2 else "rd" if r == 3 else "

th")

たくさん if ... else が続く場合はなかなか読みやす希ガス

601 :デフォルト名無しさん[sage]:2006/07/26(水) 11:08:59

>>596

その書き方が許されるとすると、かなり応用力がありそうですね。

実質任意バージョンでOKてことだから・・・

でも、あんまりやるとさすがに見づらい気もする・・・

596がすでにぱっと見ではよく分からない

602 :デフォルト名無しさん[sage]:2006/07/26(水) 13:39:10

やっぱり、判定式が真ん中に来ると読みにくいな。

A = if C then B else D

みたいな形の方が文章として読みやすいと思うんだが。

603 :デフォルト名無しさん[sage]:2006/07/26(水) 14:03:57

>>596

三項演算子いれて、

print "%d%s" % (i, r == 1 ? "st" : r == 2 ? "nd" : r == 3 ? "rd" : "th")

にしたほうが見やすくない?

607 :デフォルト名無しさん[sage]:2006/07/26(水) 15:15:14

>>602

A = B if C else D だと

CならばDと目が流れちゃうかもかも。

まあ、慣れれってことか。

608 :デフォルト名無しさん[sage]:2006/07/26(水) 15:28:49

まあ、ハズレのときはNoneが返る形ならば、

A = B or D で済むんだけどねぇ。

BがNoneならDって使い方。これは結構便利でよく使ってるんだけども。

いまだに

A = B and D は使ったことがないけども。

609 :デフォルト名無しさん[sage]:2006/07/26(水) 15:49:33

>>596

> たくさん if ... else が続く場合はなかなか読みやす希ガス

おお!まさにそう思うよ!急にこの演算子が大好きになった。

2015-05-01

クロージャ」という言葉について

http://b.hatena.ne.jp/entry/kenokabe-techwriting.blogspot.com/2015/04/blog-post_30.html

http://kenokabe-techwriting.blogspot.jp/2015/04/amazon102-93.html

この記事自体はどうでも良いのだけど、以前「クロージャ」という言葉の初期の使用例を探したことがあったのを思い出したので、参考までに。

Landin "A λ-Calculus Approach" (1966)

We represent the value of a λ-expression by a bundle of information called a "clusure", comprising the λ-expression and the environment relative towhich it was evaluated.

我々は、ラムダ式の値を「クロージャ」と呼ばれる情報の束で表す。「クロージャ」はラムダ式とそのラムダ式評価に関する環境から成る


Moses "The Function of FUNCTION in LISP,or Why the FUNARG Problem Should be Called the Environment Problem" (1970)

A useful metaphor for the difference between FUNCTION and QUOTE in LISP is to think of QUOTE as a porpous or an open covering of the function since free variables escape to the current environment. FUNCTION acts as a closed or nonporous covering(hence the term "closure" used by Landin).

LISPでのFUNCTIONとQUOTEの違いについては、次のように考えるのが有用比喩になる。QUOTEは多孔的または開放的関数をおおっていて、自由変数現在環境へと脱出できる。FUNCTIONは閉鎖的(closed)または非多孔的に関数をおおっている(このことからLandinはクロージャ(閉包)という用語を使っている)。

(訳はhttp://kreisel.fam.cx/webmaster/clog/img/www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/p/funarg/funarg.html から)


Sussman and Steele "SCHEME: An Interpreter for Extended Lambda Calculus" (1975)

In order to solve this problem we introduce the notion of a closure which is a data structure containing a lambda expression, and an environment to be used when that lambda expression is applied to arguments.

この問題を解決するためにクロージャという概念を導入する。クロージャラムダ式とそのラムダ式引数適用されるときに使われる環境から成るデータ構造である


Steele and Sussman "The Art of the Interpreter" (1978)

We say that the procedure is closed in the current environment, and the &PROCEDURE-object is therefore called a closure of the procedure, or a closed procedure.

この手続き現在環境に閉じられている(closed)と言い、それゆえ&PROCEDUREオブジェクトはその手続きの「クロージャ」あるいは「閉手続き」と呼ばれる。

2014-02-15

Python無名関数っぽいUnixコマンド作った。

GitHubとかブログやってないからここに書いておく。

使い方

標準入力を使いまわしたいとき

... | fun x:: cmd1 x : cmd2 x : ... : cmdn x | ...

ただしcmdにはサブシェルパイプなどは使用できない。

標準入力をそのまま利用する場合と一行毎に処理する場合

一行毎に処理する場合はxargs -Iを利用する。

$ ls *txt
a.txt b.txt
$ cat a.txt
1
$ cat b.txt
2
$ ls *txt | fun x:: echo x : cat x
a.txt b.txt
1
2
$ ls *txt | xargs -Ix fun _:: echo x : cat x
a.txt
1
b.txt
2

コード(fun)

>と<はそれぞれ大小の不等号で置き換えてくださいな

#!/usr/bin/env python
import sys
from subprocess import *

def take_variable(var):
	# check the syntax of variable (http://www.gnu.org/software/bash/manual/bash.html)
	# variable ::= (_|[A-z])(_|[A-z]|[0-9])*
	# variable contained space
	if len(var.split()) > 1:
		raise Exception('fail: the variable contained space')
	# check head
	if not (var[0].isalpha() or var[0] == '_'):
		raise Exception('fail: the variable contained wrong character')
	# check the body of variable
	b = True
	i = 0
	for c in var[1:]:
		i += 1
		# is variable contained invalid character?
		if not (c.isalpha() or c.isdigit() or c == '_'):
			b = False
			break
	# no exception if thre are only spaces after variable
	if not b and not var[i:].isspace():
		raise Exception('fail: the variable contained wrong character')
	elif b:
		return var[0]
	else:
		return var[:i]

def parse(var_to_cmds):
	# check the position of '::'
	try:
		pos = var_to_cmds.index('::')
	except Exception:
		raise Exception('not exists "::"')
	var = var_to_cmds[:pos]
	cmd_str = var_to_cmds[pos+2:]
	# check the format of variable and commands
	if var ==  '':
		raise Exception('fail: no variable before "::"')
	elif cmd_str == '':
		raise Exception('fail: no commands after "::"')

	return (take_variable(var),cmd_str)


if __name__ == '__main__':
	# parse variable and commands
	try:
		var,cmd_str = parse(' '.join(sys.argv[1:]))
	except Exception, e:
		print >>sys.stderr, e
		sys.exit(1)

	# var -> val
	val = sys.stdin.read().replace('\n',' ')
	# mapping and split by ':' again
	commands = map(
			(lambda cmd: cmd.replace(' '+var+' ',' '+val+' ')),
			cmd_str.split(':'))

	# exec command
	for cmd in commands:
		try:
			# need split for remove spaces
			check_call(cmd.split())
		except Exception,e:
			# print >>sys.stderr, e
			sys.exit(1)

本当はfunじゃなくて\(バックスラッシュ)で、:: じゃなくて→にしたかったんだけど、シェルが置き換えちゃうからしかたない

シェルの改造は禁断の手段だし

2013-12-12

http://anond.hatelabo.jp/20131212195453

なんかものすごくブクマ多い人で、otsuneよりも多かった人だったけど、ほぼ無言だった人。

lambdaさん?とおもったけど、怖いエントリとか付き合ってたとかは知らないので違うかもしれないな…わからん

発言が一定時間経つと消える、Permalink無しな掲示板!とかをPHPとかで作ってた人。

これもわからんkawasakiさんとかkushigahamaさんとかそのへんでねーのギーク平原の人だと思います

「互助会みたいな目的を謳ってたSNSってなかったっけ?」

非モテSNSちゃいますかね。furukatuさんがいたしふろむださんもいたような気が。非モテ論壇は喪や学生運動系が流れ込んだせいで内ゲバっぽくなってたような気がしなくもなくもないし怖いので近づかなかった

2013-03-27

プログラミングの初級になるためにの目次

http://anond.hatelabo.jp/20130325172822 の続き

言語Java7を想定。(Java8が迫っていますが、Lambdaなど関数型は、まだ早いと言うことで)

定理由は、C++比較して学べるところが大きく、安全シンプル言語から

※いきなりJavascriptはやめとけ、PHPは論外。

RubyScalaでないのは、筆者が初心者には適切には教えられないから。

おもちゃToyとしてjQueryで遊ぶのは、悪くは無いと思う。

0.はじめに

これ以降は名著の紹介や学習方法の紹介が主体となります。名著のコンポジションという形が時間限界ですね。

量については「初級になるなら、専門書を計3,000ページは修得することは覚悟してね」なんて言ったりしています

Javaで初級のわかりやすい指標ですと、[amazon:Effective Java]とGoFまでの修得。

初級になるまでに登竜門への挑戦期間を含めて、3~4年はかかっても仕方が無いとも思います

※逆に「一山いくらのコーダー」というのは、Effctive JavaGoFが達成している技術も知らずに「自分Javaプログラマー」だと誤解してしまっているような人達です。

そういったコーダーは何年経とうとも初級プログラマーにすら敵いません。

初級を目指して、プログラミングを楽しんでください。

ただ、学ぶべきことはべらぼうですが、「各分野毎に、エレガントな方法がある。だから探して修得する」ということが大切です。

※「一を聞いて十を知る」ような優秀な人に、50冊くらいドーンと本を置いてあげて、各本の目次を読ませるだけで、

底の見え無さを悟ってくれたりすると、嬉しくなってしまます

※余談ですが、その底の見え無さは数学という学問のものですね。例えば、関数型言語の底流に「圏論」というここ100年の最新の数学があります

また中級くらいで、Liskovの置換原則などが載っている本を紹介しますが、

そのLiskovの置換原則の周辺で出てくるcovariant(共変)って、圏論という数学概念だったりします。

数学出身としては、数学現実に活かされている嬉しい事例です。

閑話休題

1.目次

1)エディター・コマンドライン正規表現友達

「速く正確に大量の出力」という能力は、プログラミングをする上でも、ドキュメントを書く上でも、何より「つまら仕事」の時間圧縮ができるようになるため、重要です。

スローガンとしては「思考のスピードで出力することを目指そう」です。

紹介するエディターはemacsvimExcelです。ついでにIMEとしてATOKを使用しているため、ATOK操作Emacsライクにする話も紹介します。

ExcelWindows環境Meadowすら入れさせてくれない場合最後の砦という扱いです。

コマンドラインは、「コマンドラインというものがある」「時として非常に強力である」程度の紹介です。

※筆者はzsh全然使えません。使いこなしている方々と接する度に「勉強しなきゃな~、でも、あっちの方を先にやりたい・・・」とグズグズして、はや何年・・・

正規表現は置換を用いて、テキストの一括編集重要です。後、遭遇したくない事態ですが、スパゲッティコードの解析をする上での最後の砦です。

※遭遇したくない例

ん?何か変なところで副作用のある処理があるようだなぁ(消沈)、SQLのInsertかUpdateか一応Mergeも使っているところから逆算して原因箇所を探すか・・・(諦念)

この糞コードがっ!!こんなところに書くんじゃねぇ!!(憤怒激高)

(ここで、他にやらかしていそうな似たようなコード正規表現grep検索。改行コード込みにすれば複数文検索も可能)

わはは、予想通り共通化すべきロジックメソッドがそこら中にある・・・

2)アルゴリズムに始まりアルゴリズムに終わる(データ構造アルゴリズムの一部という認識言葉を使っています)

入門編で一つLinkedListというアルゴリズムを学びました。

少なくとも一つ本を読みながら自力でアルゴリズムを学べる人なら、大成できる可能性があります

前に紹介した[amazon:C++実践プログラミング]には、LikedListやStackなど基本的なアルゴリズムが載っておりますが、

これに加えて、初級になるためにはこれくらいは知っておいて欲しいというものを紹介します。

※後、最初から必ずしも手を出さなくても良い上限も紹介いたします。

3)正・不正の定式化・自動テスト・ロギング・アサーション・例外・契約プログラミング

プログラムは、データ入力して、加工して出力・保存する処理の繰り返しです。

まり、各一連の繰り返し毎に、「正しい入力」「正しい出力」を定式化する必要があります

それを人間の手では無くコンピューターやらせられるように、つまり自動テストできるようにテストプログラミングします。

そこで処理の進捗を確認するためにロギングし、処理が想定通りであるかをアサーションでチェックし、

不正入力不正な出力=例外が起きたら、対処策をプログラミングします。

(ex 途中で処理を中断して、入力者に適切な入力メッセージを伝えてあげる。入力自動補正などもあり得る)

で、ここら辺をまとめてどうあるべきかとして「契約プログラミング」があります

※余談。定式化・テストに際して、数学畑の人間としては、Javaだとequalsのオーバーライドでも必要になるし、同値関係同値分割だけでなく、集合論群論から学んで欲しい・・・(ここいらは数学科学部1~2年の学習内容)

4)名著を読め、新たな名著を探せるようになれ・素晴らしい人を見つけたら、縁を大切に

名著は英語で読みましょう。名著が名著たる由縁は、度々引用されることにあります

まり最新の技術書を読むときに、引用された名著のフレーズが、新旧のリンクをなし、理解の助けになります

対話は学問をする上で非常に重要です。

壁打ちといって、独り言で思考補助をするよりも遙かに有益です。

※素晴らしい師匠を探すなら、大学行くのが一番ですが、見聞を広げていく中で出会いを待つしかないとも思います

5)オブジェクト指向とはなんぞやとGoFデザインパターン + マルチスレッドプログラミング

マルチスレッドが難しいのは「バグを起こしにくいプログラミング」を求められるから

まりTry and Errorからの決別が求められ、今後の仕様変更拡張も踏まえて慎重に慎重にデザインする必要があります

できる限りステータス変数を持たずに安全に、でもマルチスレッドにするのだから効率を追求しなければ本末転倒

でも効率のためにはメモ化に代表されるキャッシング必須と、アンビバレンツな要素のバランス取りが難しい。

このために、リエントラントな実装・抽象と実装の分離など様々なエッセンスを駆使することが必要です。

床屋哲学者問題

6)日々コツコツと

というよりも孔子曰く、知っているよりも好きであること。好きであることよりも楽しめることのほうが強く、

気づいたら日々時間が許す限りプログラミングをしてしまうのが理想です。

仕事として嫌々スキルを磨かなきゃということが、これほど不幸な職業も無いですね。

余談 FizzBuzz写経について

FizzBuzz」は、本来の目的通り、協力会社の選定の際の足切りには便利ですが、

学習の達成度を測るには、簡単すぎる不適切な問題ですね。

写経

数学畑の人間として言わしてもらうと、

写経数学証明問題を、教科書テンプレ通りに、数値や名称だけ変えて記述することしか出来ない人の発想。

まり矛盾無く一貫した論理モデル」の構築が自由に出来ず、テンプレの微修正しか出来ない人の発想。

また、外部の「矛盾無く一貫した論理モデル」の吸収が不自由で、アルゴリズムを「手順」としてしか捉えられないように見受けられる。

プログラマーとしての大成は見込めないと思う。

数学畑として提供できる試金石

連続であること確かめるための「ε-Δ論法」(数学科学部1年の学習内容)

事前知識無く、このモデルを理解できる人は、十分に「矛盾無く一貫した論理モデル」を構築できる人。

1.まず「連続」とは何ぞやと考えて概念を膨らませてください。

2.十分思考できたと思えたら、Wikiあたりでイプシロン デルタ論法を見てください。

 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん