函数式思维: 转换和优化各种语言的更多功能比较

函数式编程起源于数学和计算机科学,这两种科学对术语都各执一词。语言和框架设计师们开发了他们最喜欢的命名法 ,结果发现基础范式已经有名称了。由于术语存在不一致性而使得了解函数式编程范式变得不容易。

在 “大量转换 ” 中,我提出了对质数进行分类的问题,并且跨各种函数式语言就 JVM 和两种函数式 Java 框架实现了一种解决方案。本 期文章继续探讨上一期的主题,通过两种方式优化了上一期的算法,展示了各种语言中的后续更改。本期文章和上一期文章 同样阐述了各种工具和语言中术语与特性可用性之间的区别。具体来讲,我练习了这些示例中的 map、filter 和 memoize 。

使用纯 Java 语言优化的质数分类法

所陈述的问题是确定一个数是否是质数,一个质数的因子只包括 1 和它本身。在解决该问题的多种算法中,我选择了阐述函数式编程领域的过滤 和映射。

在上一期中,我对确定一个 数的因子的算法采取了一种朴素法,选择了简单代码而不是最佳执行代码。在本期中,我使用几种不同的函数式概念优化了 这种算法,此外,我还优化了用例的每个版本,类在该用例中调用了多次以便对同一个数进行分类。

我的用于确定 质数的原始 Java 代码如清单 1 所示:

清单 1. 质数分类器的原始 Java 版本

public class 

PrimeNumberClassifier {
    private Integer number;

    public PrimeNumberClassifier(int number) {
        this.number = number;
    }

    public boolean isFactor(int potential) {
        return number % potential == 0;
    }

    public Set<Integer> getFactors() {
        Set<Integer> factors = new HashSet<Integer>();
        factors.add(1);
        factors.add(number);
        for (Integer i = 2; i < number; i++)
            if (isFactor(i))
                factors.add(i);
        return factors;
    }

    public int sumFactors() {
        int sum = 0;
        for (int i : getFactors())
            sum += i;
        return sum;
    }

    public boolean isPrime() {
        return sumFactors() == number + 1;
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, 优化
, 语言
, 质数
, number
, 函数式语言
public
易语言内存优化、易语言cpu优化源码、易语言 黑屏优化、r语言 最优化、c语言优化,以便于您获取更多的相关知识。

时间: 2024-08-02 22:43:34

函数式思维: 转换和优化各种语言的更多功能比较的相关文章

函数式思维:大量转换:同义词掩盖了相似性

函数式编程语言实现代码重用的方法与面向对象的语言不同,这个主题我在 "第 2 部分" 中进行了分析.面向对象的 语言往往拥有众多可进行多种操作的数据结构,而函数式语言却只有极少数可进行多种操作的数据结构.面向对象的语言鼓 励您创建特定于类的方法,而您可以捕获一些重复出现的模式,以便以后重用.函数式语言鼓励您将常见转换应用于数据结 构,使用更高级的函数来定制特定实例的操作,从而帮助您实现重用. 相同的数据结构和操作出现在所有函数式语 言中(也出现在支持 Java 中的函数式编程的众多框架

Swoole项目思维转换

PHP是最好的语言,Swoole重新定义了最好的语言,这当然是个梗了,不过php做为一个入门低.开发快.执行效率高的一门语言,而在以快速著称的pc互联网时代,无可争议的成为首选,这是php的优势,然后优势慢慢转化为思维定势,在很多工程师看来php开发就等同于web开发,然而如今已经是移动互联的时代,物联网,智能硬件也如火如涂,好像PHP不是那么受待见了(ps:一直如此),而swoole的出现,成功突破了这一思维定势,使phper可以从web开发跳出,进入了更大的服务器网络编程领域,但web开发和

Java函数式思维: 函数设计模式

尽管 Java 不支持这些技术,下一代 JVM 语言均支持这些技术,但其具体实现细则有所不同.在本文中,Neal Ford 将探讨 Groovy.http://www.aliyun.com/zixun/aggregation/16945.html">Scala 和 Clojure 如何通过以 Java 无法支持的方式来实现函数式扩展,从而实现解释器设计模式的目的. 在本期 函数式思维 的文章中,我将继续研究 Gang of Four (GoF) 设计模式(参阅 参考资料)的函数式替代解决方

BIRT报表怎样随浏览器语言自动转换显示不同的语言

问题描述 BIRT报表怎样随浏览器语言自动转换显示不同的语言 根据Birt的帮助文档进行本地化设置,在报表的同级目录下建立中文.英文的properties files(如Test_zh_CN.properties,Test_en_US.properties),同时在Properties-Resources中增加资源文件,并在报表的Properties-Localization中定义Text key "wi_testview",其中文值为"测试视图",英文值为&quo

C语言进制转换代码分享_C 语言

代码很简单,功能也很简单,这里就不多废话了 #include<stdio.h> int main() { char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int zh[32],i=0,w,j; long int b,y; printf("请输入一个十进制数,我能帮您把它转换成2~16任意进制数:\n"); scanf("%d",&y);

C语言中自动隐式转换与类型强制转换实例分析_C 语言

本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

[20140116]视图?隐式转换?sql优化问题.txt

[20140116]视图?隐式转换?sql优化问题.txt 最近一直在优化单位的垃圾数据库,这个数据库可以讲是一个垃圾工程.在有优化的过程遇到视图中存在隐式转化问题,在我的测试环境模 拟出来,提出解决方案: 1.建立测试环境: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise

C#语言的未来功能

简介 C# 是创新性的新式编程语言,它巧妙地结合了最常用的行业语言和研究语言中的功能.在保持 C# 设计思想不变的同时,Microsoft 在 C# 语言中引入了几种潜在的新功能,提高了开发人员在语言构造方面的效率. Microsoft C# 自 2001 年 2 月 C# 问世以来,很多开发人员已经开始使用 C# 编程语言来构建软件.而 Microsoft 自身也使用 C# 构建了几种正式的应用程序,包括 .NET Framework.MSN Web 属性和 Tablet PC SDK.由此可

网页转换-请问设计了一套笔试题(word2007版),如何转换成网页格式并具备倒计时功能?

问题描述 请问设计了一套笔试题(word2007版),如何转换成网页格式并具备倒计时功能? 我设计了一套人格测试题,都是选择题,用的是word07版,希望将答题时间限定在15分钟内,在候选人点击进去时便开始倒计时,咨询了一位IT朋友,她说要转换成网页格式并下一个插件,请教各位大神,应该如何做才能实现计划功能?谢谢! 解决方案 http://www.officezu.com/a/word/6203.html 解决方案二: 网页的话,js有很多第三方计时库