[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
567(1): 2020/11/11(水)19:20 ID:qheOKxfd(1) AAS
正格評価について質問です
ひとつの引数しかない関数 f を正格評価するときには
f $! x
でよいようですが2引数の場合はどうするんですか?
( f $! x ) $! y
で x, y を先に展開してくれますか?
良さげなんですがどう確かめたものやら
なんか正格評価と遅延評価で格段に計算量が変わる f の例ってありますか?
574(1): 2020/11/16(月)23:33 ID:bCg5e61i(1) AAS
>>567
もうとっくに解決したかもしれませんが、評価の順は trace 関数でも確認できます。
import Debug.Trace
g :: Int -> Int -> Int
g x y = trace ("g") (x + y)
main :: IO ()
main = do
let a = trace ("a") 1
let b = trace ("b") 2
let c = (g $! a) $! b
putStrLn $ show c
これを実行すれば、b a g 3 の順に出力されます。
正格評価されていると言えます。
ちなみに、($!) を ($) に変えれば、g a b 3 の順に出力されます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s