Haskellのラムダ式のパターンマッチに関する質問です。会社のブログログイン登録スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。未解決Haskellのラムダ式のパターンマッチに関する質問です。236件3Haskellを勉強して1週間ほどなので、馬鹿らしい質問かもしれませんがあらかじめ御了承ください。2)しかし、これを実行するとコンパイルは通るのですが、無限ループになってしまっているようなのです。無限ループの陥ってしまうのかを教えていただきたいです。残念ながら少なくとも標準のHaskellでは使えません。LambdaCaseというGHCによる言語拡張を有効にする必要があります。言語拡張を有効にする場合、下記のような特殊なコメントを、ファイルの先頭に書いてください。#-}GHCi上で試したい場合、下記のように入力してください。-XLambdaCaseしかしいずれにしても、ラムダ式の中でパターンマッチをする構文は、tokumeimanxxさんに挙げていただいたようなものではありません。かかわらずなぜコンパイルが通ったのかというと、それはdoを使ったからです。doは通常、Monad型クラスのインスタンスである型の値(「アクション」とも言います)を行ごとに列挙するのに使用するのですが、tokumeimanxxさんが書いたように、それ以外の式を行ごとに列挙するのにも使えます。xといった行は、それぞれ別々のラムダ式として解釈されてしまっています。do記法にアクションでない、普通の式を列挙した場合、結果をletで代入しなければ、それらの式は無視されてしまいます。2)のみが有効な式として解釈されたため、if式のthen節もelse節もどちらでも再帰している上記の式によって、無限ループとなってしまった、ということです。この、「doに列挙した式の結果をどこにも代入してない」という間違いは、GHCの警告を有効にすることで、検出できます。tokumeimanxxさんのコードをpow.hsという名前で保存した上で、GHCi上で下記のように入力すれば、その警告を見ることができるでしょう。[-Wunused-do-bind]と書かれている警告が、当該の警告です。|この質問に回答するには、ログインする必要があります。求めていた回答ではありませんか?haskellのタグが付いた他の質問を参照する。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。従って情報を開示できることに同意したことになります。選択した項目のみ受け入れる。