0

私は非常によく似たコード ブロックを持つプログラムを実行しており、「ブロック」内の場所を作成しようとしていました。ほんの一例

function "sum" x = x + a
function "product" x = x * a
  where 
    a = 2

両方の行で「a」を置き換えたいのですが、where を使用してこれが可能かどうかわかりませんでした

前もって感謝します

4

4 に答える 4

7

これが本当に必要な場合は、2 つの関数句をマージする必要があります。これを行う1つの方法:

func what x = case what of
        "add" -> x+a
        "mul" -> x*a
    where
       a = 2
于 2013-02-07T23:28:15.430 に答える
3

2 番目の関数を導入することもできます。

function fName x = function' fName x
   where
      a = 2
      function' "sum"     x = x + a
      function' "product" x = x * a 
于 2013-02-08T01:05:38.737 に答える
0

新しい関数下駄を定義できると思います

geta=2

そして、他の関数で下駄関数を使用できます。

すべての関数を組み合わせるのは良い方法ではないと思います。おそらく、20個の関数に同じ値が必要になるでしょう。

于 2013-02-08T01:36:08.363 に答える
0

(私は初心者なので許してください。)これは不可能だと思います。「ブロック」のスコープは、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これらの関数だけがそれを見ることができます。

于 2013-02-07T22:42:34.527 に答える