返回函数

我被赋予以下任务:

  

编写一个函数enc :: Int -> String -> String,该函数通过在每个字符的Unicode值上添加一些给定的整数来加密字符串。现在,使用enc作为本地声明的函数,编写一个函数encrypt :: Int -> String -> (String,String -> String),该函数接受一个String和一个Int并返回一对加密的字符串和一个函数,解密字符串。

我已经编写了函数enc,这非常简单,但是我不知道如何从encrypt返回函数。

到目前为止我有

encrypt :: Int -> String -> (String,String -> String)
encrypt num word = (enc num word,???)

我不知道该写些什么来代替'???'。我已经读过一些有关咖喱函数的文章,但是我发现的所有东西都定义了一个函数,该函数将函数作为参数并使用该函数递归地调用自身。 encrypt不使用函数作为参数。如何定义一个全新的函数并从另一个函数内部返回它而不是返回其值?

yhcgyym 回答:返回函数

有一种显式的lambda方法,它使用参数声明函数:

-- Expression is of the type String -> String
-- Similar to python  lambda mystring: enc(-num,mystring)
--         or java    (mystring) => enc(-num,mystring)

\mystring -> enc (-num) mystring

但是,由于使用了curring,您只需将enc :: Int -> String -> String并赋予一个int值,就可以得到String -> String

-- Also of the type String -> String
enc (-num)
,

正如其他人指出的那样,lambda表达式将是最直接的方式。请注意,您仍然可以简单地定义自己的函数并返回它,例如

encrypt :: Int -> String -> (String,String -> String)
encrypt num word = (enc num word,myFunction)
   where
   myFunction :: String -> String
   myFunction str = .... -- here you can use num,word,str to produce the result you need
本文链接:https://www.f2er.com/3141854.html

大家都在问