haskell-jp / questions #38

モジュールは定義してないので読まれないのはいいんですけど、まあたぶんdoubleMeも読まれてませんよね?、ここで
するとどうなりますか?あと念のためprojectのディレクトリ構成とghciを立ち上げている位置でのpwdを見せてください
あと、いつも使ってるIDEのhaskell plug-inとか、emacsのinteroとか使った方が楽かもしれません。
あと、いつも使ってるIDEのhaskell plug-inとか、emacsのinteroとか使った方が楽かもしれません。

それは今は後回しにして良いんじゃないかと。。。多分すごいH本を読んでGHCiで試そうとしているだけですからおそらくまだそれらをインストールしてませんし、端末の操作に不慣れだと、それらのインストールもまた大変です。
そして今更気づいたんですが、画面をスマホでとるよりはスクリーンショットという機能を使った方が見やすくて良いです。
https://support.apple.com/ja-jp/HT201361 を参考に、スクリーンショットで直接画面を画像として保存してみせてください。
(macOS Mojaveでない場合はすみません...)

あるいは、ターミナルの画面は、基本的にすべてそのままコピーできるようになっているので、 @Lizyc-jp さんの入力と、それに対する結果がわかるよう選択してコピーしてこちらに貼り付けてみてください。
大抵はそれで十分です。
https://haskell-jp.slack.com/archives/C5666B6BB/p1548286647228600?thread_ts=1548136855.190500&channel=C5666B6BB&message_ts=1

そうですね、失礼しました。
では<@UFDKZJBLK> さんは、端末操作に慣れてきたらもっと楽にhaskellプログラミングができる楽しいソフトがある程度に思っていただければ、

(ご回答の邪魔になるのでinteroなどの話は私からは以上にいたします。)
すみません。本当に初めてやるのがhaskellでなにもかも分かってない状態で初めてました。ターミナルも全くの初見です笑笑。:cd /path/to/directory baby.hs でやってみれば確認できるでしょうか?
:cd /path/to/directory
:load baby.hs です 違うコマンドですよ
@sgsh さんが言ってたソフトもいずれは必要になるかもしれませんので、入れて色々と遊んでみますね!!
@りんご姫 さんありがとうございます:blush:まだまだ修行が足りないですね笑笑頑張ります!!
Haskell が初なの珍しい、ぜひ感想とか聞きたいですね :star:
こう言ったら失礼かもしれませんが、自分の親の友人のプログラマーが安全なhaskellが良いよと言われたのもありますしhaskellはjava程人気ではないというところがあって他と違うことがやりたいなって感じがしたというのもありやりたいなと思いました笑笑将来起業もしたいので、
@sirkerf has joined the channel
QuickCheckに関しての質問なのですが、以下のYampaプログラムをテストしたいです。
そのために必要なこととして、
1.初期座標、初期速度を変数にする(コマンドラインで指定できるようにする)
2.Yampaプログラムから直接テストを行うことは難しいので1000ループで区切りその座標速度ベクトルを配列に入れる
3.上でもとめた配列が条件に合うかどうか検証する(今回の場合は座標が-100以上)
だと思うのですが、具体的にどうプログラムを加えていけばいいでしょうか?
上の動画の通り、あえて地面の接触判定が雑なプログラムで地面に整地せず、想定とは違う動きになるというのをQuickCheckでさまざまな初期位置初期速度を入力したときに座標が負になることでbool型で返していくイメージです。
@ has joined the channel
http://hackage.haskell.org/package/Yampa-0.13/docs/FRP-Yampa.html#v:embed embed関数を使うと、SFの出力をリストとして取り出すことができます。`embed (bouncingBall p0 v0) ((), repeat (0.1, Just ()))`の結果を検査すれば良いのではないでしょうか
@apo has joined the channel
ありがとうございます。
embed関数を用いてためしてみます
再度質問すみません
stack ghci上で上に似たようなコマンドを入力してリストが出たのを確認したのですがこれをどうやってQuickCheckの判定を含めて導入すればよいのでしょうか?
そもそもstack ghci上で上のコマンドを打つのが間違いなのでしょうか?
これは(show a)と記載されてると言うことはaを返すのではないのですか?自分としてはたしかにaに入ってるものはstring値ですが、なぜ最後はaではないのですか?
これは「aがShowである」という制約を示しているだけで、返り値を示しているわけではないですね。
あーそういうことか笑笑自分制約あまり分からないものでもう少し勉強してきます笑笑
ちなみに Show a の S は大文字ですね
型は大文字から、関数は小文字から始まるのがHaskellの文法ですからね!
ラムダ式とクロージャって何が違うんですかね? Haskell 関係でクロージャという言葉を聞いたことがないんですが、Haskell にクロージャはあります?
「自由変数が含まれる関数」を返す関数によって返された関数、ぐらいの認識でした。
参照している自由変数はその「自由変数が含まれる関数」にしかアクセスできないのでprivateなフィールドをシミュレートする、みたいな例をあちこちの言語で見かけましたね。
典型的には https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3 の最初に出てくるSchemeの例です。
同じ要領でHaskellでもできると思います。
Haskellだと https://en.wikipedia.org/wiki/Closure_(computer_programming) に載っているようなPythonの例
def h(x):
    return lambda y: x + y  # Return a closure.

をそのまま再現しても単に2引数の関数を定義するのと変わらないので、意識されにくいというのはあるでしょうね。。。
ラムダ式は構文で、クロージャはオブジェクト(値など)の一種であると言えば違いは明らかになると思います。 でGHCのクロージャが説明されています
何かを習得するとき一般に言えることですが、複雑なことを成し遂げたいときはまず個々の動きから始めましょう。この場合の考え方は
• QuickCheckは純粋な関数をテストする仕組みである
• 簡単なもの(足し算の交換則など)をQuickCheckしてみて、基本的な使い方を知る
• SFを純粋に検査できるようにする(embed)
• 両者を組み合わせ、目標を達成する
そういう細かいとこも注意して頑張ってみます!!
回答ありがとうございます! どちらも言われてみればそうですね! クロージャ内では破壊的な代入が可能な必要があるという変な勘違いをしていました。そして、GHC のクロージャについての説明をつまみ読みしたんですが、Heap に保存される一つ一つのオブジェクトは全てクロージャ (GHC の呼び方に従えば) という理解で合ってます? まるで空気のようですね……
pure Haskell と言うとき、FFIやCとかがない Haskell コードを指すのか、IOなどの副作用がない Haskell コードを指すのか、どちらでしょうか。
前者かなという気持ち
私は no IO の方を連想したんですが、検索してみると no FFI という意味が多い感じでした https://www.google.com/search?q=%22pure+haskell%22
もう少しQuickCheckについて勉強していこうと思います
ありがとうございました!
完全に感覚の話なのですが、僕も前者だと感じました:wink:
この場合のpureが前者だと感じるのは他言語からのアナロジーである可能性が多いと思います。無論私も前者と感じました pure JavaScriptだなどと言った場合に純JS製である事を意図していることから
GHC拡張などを使わないHaskell…というのはさておき私も前者派です
Haskell の関数は、デフォルトでカリー化されているので、クロージャが陽には見えません。部分適応すれば、他言語でいうクロージャが返されますが、それをクロージャだと意識することはないです。
ただ、Haskell の部分適応では、複数の関数で共有しているが、他からアクセスできないような変数は作れませんね。
Haskell は pure であるというときと、pure Haskell で作るというときとでは、意味が変わると思います。
タプルとか、何かしら複数の値を入れられるものに入れて返さない限りは無理でしょうから、確かに部分適用ではできませんね…
みなさんありがとうございます。pure Haskell というのを only Haskell のこととしてみる方が多いようですね。pure Haskell implementation という表現をしているライブラリがあって気になっていました。
@ has joined the channel
D言語だとfunctionと外の値を持つdelegateが明確に別れていて面白いですね
https://tour.dlang.org/tour/en/basics/delegates
@ has joined the channel
@tiquer has joined the channel