标签: functional-programming

函数式编程和Haskell

我来自1年制课程html/css/javascript/jQuery和6个月课程的背景Java's JSP Servelets.我在大学的第二年,在第二年的最后一个学期,我没有通过我们学习Haskell的功能编程课程(可能主要是因为我收到了90%的分数.在我的第二年似乎我也将参与一个关于女巫Haskell的课程,所以学习基础知识是不够的.

我感兴趣的是:

- OOP编程和函数编程之间的区别

- 对于使用Haskell进行功能编程的初学者,建议使用哪本书(我似乎无法做出教授写的内容或尾部)

我完成这本书后去哪里练习语言

- 我可以用Haskell做什么,不能用Java做

- 我需要很多数学来理解Haskell(我的大学教授在他的课程中使用了很多数学相关的东西)

java haskell functional-programming

-2
推荐指数
1
解决办法
392
查看次数

这种短路(&&)应该有效,但事情并非如此

当两者都是真的我想要它敬酒......但它看到它们是假的.

if (dateTime > System.currentTimeMillis() && chkBox.isChecked()){
                     Toast.makeText(getBaseContext(), "BEFORE", Toast.LENGTH_SHORT).show();
                     return;
    };
Run Code Online (Sandbox Code Playgroud)

java logic android functional-programming

-2
推荐指数
1
解决办法
114
查看次数

命令式编程和函数式编程的效率

我对IP和FP的性能有疑问.假设我有一个计算第n个Fibonacci数的函数.

在命令式编程中,我可以选择使用迭代方式,递归或动态编程来计算第n个Fibonacci数.当然,与递归渐近相比,迭代方式和动态编程将表现得更好.

在函数式编程中,假设没有涉及的状态,那么我只能以递归的方式进行.

在这种情况下,这并不意味着功能编程在效率方面与渐进式编程相比总是表现得相同或更慢(渐近)?

现实世界的函数式编程如何处理这个问题?

algorithm performance functional-programming imperative-programming asymptotic-complexity

-2
推荐指数
1
解决办法
600
查看次数

CoffeeScript中的懒惰和函数式编程

咖啡脚本是否懒惰评估?如果是这样,我可以用功能方式编写coffeescript吗?

functional-programming coffeescript

-2
推荐指数
1
解决办法
568
查看次数

如何重写此代码以使用Stream和功能API?

我一直在尝试重写以下内容以使用Stream API.我似乎无法弄清楚如何到Map(或字段)为System.setProperty(k,v)设置键值对

我的数据只是在它们之间有空格的行,它们分别分为键和值:

foo bar
mykey myvalue
nextkey nextvalue
Run Code Online (Sandbox Code Playgroud)

我的工作源代码在这里:

try {

      Scanner scanner = new Scanner(Paths.get("/path/to/file.txt"));
      while(scanner.hasNextLine()){
          String line = scanner.nextLine();
          String[] array = line.split(" ");
          if(array.length == 2){
                System.setProperty("twitter4j.oauth." + array[0], array[1]);
          }
      }

} catch (IOException e) {
        e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

在这里放一个破碎的样本,虽然我已经遍布地图(呻吟)试图用流写它,但这里只是为了证明我尝试了一次迭代:-p

Stream<String> lines = null;
try {
        lines = Files.lines(Paths.get("/Users/bellis/dev/data/twitter.txt"));
} catch (IOException e) {
        e.printStackTrace();
}
String[] words = lines.collect((Collectors.joining("\n"))).split(" ");
System.out.println("twitter4j.oauth." + words[0] + " " + words[1]);
Run Code Online (Sandbox Code Playgroud)

上面当然是不正确的我知道有更好的方法来使用函数和其他常见的流成语来编写它,但我似乎无法做到正确.您如何建议使用Stream和功能API编写此代码?

java functional-programming java-8 java-stream

-2
推荐指数
1
解决办法
62
查看次数

在函数内部使用变量

假设我有一个称为“ Coord”的数据类型,其定义如下:

type Coord a = [(Int, Int)]
Run Code Online (Sandbox Code Playgroud)

我想创建一个类型为“ Coord”的变量以在下面的函数中使用。该函数接受Coord类型的变量,并将列表中每个项目的x坐标乘以2。然后将这些新坐标中的每一个存储在NEW Coord变量中。我不确定如何创建/声明/使用我打算返回的新变量。

foo :: (Eq a) => Coord a -> Coord a
Run Code Online (Sandbox Code Playgroud)

variables haskell functional-programming function

-2
推荐指数
1
解决办法
77
查看次数

从Haskell中的列表返回序列的第一次迭代

我有一个序列数组,具有无限的迭代次数(例如[6,6,6,6,6]或[23,24,23,24]或[1、2、3、4、1、2、3、4 ])如何遍历Haskell中的每个此类列表并仅返回第一次迭代?在上述示例中:[6]; [23,24]; [1、2、3、4]

谢谢!

编辑:对不起,我不准确。列表确实是无限的。我的目标是返回给定Integer的等分序列的列表。我有一个函数返回除法器的总和。我从第一个和开始了递归调用,并构造了列表。这样就产生了像[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ...]的列表。

首先,我想解决这个问题,方法是使用列表的第一部分,直到第二个原始Int。但是,这让我感到震惊:更容易检查elem列表中是否存在总和。如果是,请按原样返回列表。否则,将总和追加并继续。

编辑2:产生(至少在我的定义中)无限列表的代码是以下块:

aliquot :: (Integral a) => a -> [a]
aliquot 0 = []
aliquot 1 = [1]
aliquot n = n : (aliquot $ sum $ divisors n)

divisors :: (Integral a) => a -> [a]
divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
Run Code Online (Sandbox Code Playgroud)

math haskell functional-programming

-2
推荐指数
1
解决办法
78
查看次数

FilterMap 函数定义

我正在尝试获取一个程序,该程序首先从列表中过滤出与条件匹配的元素,然后根据也作为参数接收的函数映射元素。

filterMap :: (a -> b) -> (a -> Bool) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

例如:

filterMap (+1) even [1..10] == [3,5,7,9,11]
filterMap (2^) (/=0) [0,1,0,2] == [2,4]
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming

-2
推荐指数
1
解决办法
106
查看次数

如何在js中将对象转换为数组?

我有数组属性的对象。

const data = {
test:["1","2"],
test2:["1","2"]

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试转换这种格式。我正在使用 Object.values(data) ,我只能使用 array 。我需要得到这种格式。

我的尝试代码:

让输出 = Object.values(data)

output : [{test:[{label:"1",value:"1"},{label:"2",value:"2"}]},{test2:[{label:"1",value:"1"},{label:"2",value:"2"}]]
Run Code Online (Sandbox Code Playgroud)

javascript arrays functional-programming object

-2
推荐指数
1
解决办法
630
查看次数

haskell 程序来查找两个列表之间的相似性

好的,所以我是 Haskell 的新手,我想编写一个程序,在其中我使用两个列表并找到它们之间的相似性(常见项目数/项目数)。这是我到目前为止所拥有的:

fun2 :: [Int]->[Int]->Float

fun2 [] xs2 = 0
fun2 xs1 xs2 = if head xs1 == head xs2 then (1/length xs2) + fun2 tail xs1 xs2
else if head xs1 /= head xs2 then fun2 xs1 tail xs2
else fun2 tail xs1 xs2

main = fun2 [1,2,3,4] [3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

所以让我解释一下我想要做什么,我定义了我的函数来获取两个整数列表并输出一个浮点数(相似性百分比)。然后我编写我的函数,基本情况是当第一个列表为空时,而该函数会将第一个列表的每个元素与第二个列表的每个元素进行比较,如果找到匹配项,它将加 1 然后除以大小以获取百分比。但是,当我运行此代码时,出现了很多错误:

main.hs:4:45: error:
• Couldn't match expected type ‘Float’ with actual type ‘Int’
• In the expression: (1 / length xs2) + fun2 tail xs1 xs2
  In …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming list similarity percentage

-2
推荐指数
1
解决办法
57
查看次数