0

我正在做一个具有非常相似代码块的程序,并且我试图在“块”中创建一个位置。只是一个例子

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

我希望在两行中都替换“a”,但我没有发现这是否可以使用 where

提前致谢

4

4 回答 4

7

如果你真的需要这个,你需要合并两个函数子句。一种方法:

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

您还可以引入第二个功能:

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

(请原谅我,因为我是新手。)我认为这是不可能的。“块”的范围where是它定义的函数。但是你可以做的是:

Prelude> let a = 2
Prelude> let sum x = x + a
Prelude> let product x = x * a
Prelude> sum 3
5

这是在 GHCi 中完成的。您可能担心每个人都可以看到a,但是如果这是在 .hs 文件中,您可以将其设为模块而不是 export a,然后只有这些函数可以看到它。

于 2013-02-07T22:42:34.527 回答
0

我认为您可以定义一个新功能 geta

geta=2

然后您可以在任何其他功能中使用 geta 功能。

我不认为混合每个函数是一个好方法,也许你会有 20 个函数需要相同的值

于 2013-02-08T01:36:08.363 回答