私は非常によく似たコード ブロックを持つプログラムを実行しており、「ブロック」内の場所を作成しようとしていました。ほんの一例
function "sum" x = x + a
function "product" x = x * a
where
a = 2
両方の行で「a」を置き換えたいのですが、where を使用してこれが可能かどうかわかりませんでした
前もって感謝します
私は非常によく似たコード ブロックを持つプログラムを実行しており、「ブロック」内の場所を作成しようとしていました。ほんの一例
function "sum" x = x + a
function "product" x = x * a
where
a = 2
両方の行で「a」を置き換えたいのですが、where を使用してこれが可能かどうかわかりませんでした
前もって感謝します
これが本当に必要な場合は、2 つの関数句をマージする必要があります。これを行う1つの方法:
func what x = case what of
"add" -> x+a
"mul" -> x*a
where
a = 2
2 番目の関数を導入することもできます。
function fName x = function' fName x
where
a = 2
function' "sum" x = x + a
function' "product" x = x * a
新しい関数下駄を定義できると思います
geta=2
そして、他の関数で下駄関数を使用できます。
すべての関数を組み合わせるのは良い方法ではないと思います。おそらく、20個の関数に同じ値が必要になるでしょう。
(私は初心者なので許してください。)これは不可能だと思います。「ブロック」のスコープは、where
それが定義されている関数です。ただし、できることは次のとおりです。
Prelude> let a = 2
Prelude> let sum x = x + a
Prelude> let product x = x * a
Prelude> sum 3
5
これは GHCi で行われます。誰もが を見ることができるのではないかと心配するかもしれませんa
が、これが .hs ファイルにある場合は、エクスポートせずにモジュールにすることができ、a
これらの関数だけがそれを見ることができます。