Haskellでいろいろ遊んでみる

初心者向けテーマとして、ブラックジャックが面白い、らしいので、Haskellで作成してみました。

https://qiita.com/KNaito/items/385fb1701f70ffb8ffd4

で、Qiitaの記事には完成したものしか書いてないのですが、そもそも自分が普通のプログラミング(いわゆる手続き指向型プログラミング)思考になっているため、本当に基本的なことでつまづきまくりました。

例えば、整数を2で割った値を返し、1の場合は1を返す次のような関数を定義してみます。


func :: Int -> Int
func 1 = 1
func x = x `div` 2

Haskellに慣れていない人のために、JavaScriptで書くとこれは


function func(x) {
if (x==1) return 1;
return Math.floor(x/2);
}

こんな感じ。

でもって、これを呼び出すときに


main :: IO ()
main = do
let x = 10
let y = func x
print y

と呼び出せば、期待通り10を2で割った5が表示されるのですが、変数の名前を節約したいと思って


main :: IO ()
main = do
let x = 10
let x = func x
print x

としてしまうと、無限ループしてしまいます、、。

理由は多分、print xの段階で遅延評価がはじまり、そこでx = func xの右辺を計算しようと
するのですが、右辺のxは、結局同じ式のx = func xで定義されているので、x = func func x
となっていまい、そのまた右辺のxを計算しようとして、x = func func func x ...と無限ループ
してしまうようです。

数学的には

セキュリティとプライバシーの設定画面で、「許可」ボタンがクリック出来ない

Macで設定から「セキュリティとプライバシー」の画面を選択し、
「いくつかのシステムソフトウェアの読み込みがブロックされました。」と表示された右にある
許可ボタンをクリックしても、何も反応がない。

もちろん、画面下の「変更するにはカギをクリックします。」とクリックしていても。

これもすごくハマってしまいましたが、要はリモートデスクトップ(リモート画面)からは「許可」ボタン
をクリックしても反応しないとのこと。
実機で作業すれば正しく動作しました

Thunderbirdが起動できない (Mac)

Thunderbirdを起動しようとしたら、「すでに別のThunderbirdを開いています。同時に複数のThunderbirdを開くことはできません」というエラーが出て、Thunderbirdが使えない

検索して調べて見るも、.parentlockファイルを削除するように書いてあるが、.parentlockファイルがどこにあるかがわからない、、。何度か試行錯誤するうち、High Sierra (Sierraも?)では

~/Library/Thunderbird/Profiles/ホニャララ.default/.parentlock

にあることが判明し、これを削除することで無事起動出来ようになりました。

ちなみに、Firefoxのlockファイルはこちら

~/Library/Application\ Support/Firefox/Profiles/1vlazryw.default/.parentlock


こちらの記事にもありました。エラー文言が違うので検索でヒットできなかった、、、。
http://www.edu.gsic.titech.ac.jp/node/73

Windowsの場合は、AppData\Mozillaにあるらしいです。
http://kb.mozillazine.org/Profile_folder#Where_is_my_profile_folder.3F

Xcode 9.2でストーリーボードがパッケージされない問題

このため、iTunesConnectにアップロードしても審査でリジェクトされる。
iPadで開こうとするとクラッシュするためだ。

ログを見てみると、次のようなエラーが出ていた。


: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'hogehoge~ipad' in bundle NSBundle


このエラーが出た場合、storyboardファイルをリムーブして再度組み込むとか、Localizationに対応するとか
いろいろ情報があったが、それらを試みてもダメだった。

そして、結局のところ、Xcode 9.2だと

hogehoge.storyboard
hogehoge~ipad.storyboard

の2ファイルがあると、

hogehoge.storyboard

の方しか組み込まれないようだ。(パッケージの中身を確認すると、hogehoge.storyboardcしか入っていない)

なので、ファイル名を変更して

hogehoge.storyboard
hogehoge_ipad.storyboard

としたところ、正しく動作するようになった。(もちろん、ViewController側でも読み込むファイル名を
変更した)