今日蛋疼应某人要求用functional programming实现冒泡排序,找了段erlang代码转换成了groovy
def bubbleSortP(List list) {
if (list?.size() == 1)
list
else {
def rest = []
if (list.size() > 2)
rest = list[2..list.size() - 1]
if (list.get(0) > list.get(1)) {
[list.get(1)] + bubbleSortP([list[0]] + rest)
} else {
[list.get(0)] + bubbleSortP([list[1]] + rest)
}
}
}
def bubbleSort(List list) {
if (list?.size() == 1)
list
else {
List sublist = bubbleSortP(list)
bubbleSort(sublist[0..sublist.size() - 2]) + sublist[sublist.size() - 1]
}
}
def tobeSort = [6, 5, 3, 1, 8, 7, 2, 4]
println bubbleSort(tobeSort)
下面是使用了inject (left fold) 的代码
def bubbleSort(List list) {
if (list?.size() == 1)
list
else {
List sublist = list.inject([]) {List previousResult, iterationValue ->
if(previousResult.size() == 0)
previousResult << iterationValue
else{
final def last = previousResult[previousResult.size() - 1]
if(iterationValue > last)
previousResult + [iterationValue]
else{
previousResult << last
previousResult.set(previousResult.size() - 2, iterationValue)
previousResult
}
}
}
bubbleSort(sublist[0..sublist.size() - 2]) + sublist[sublist.size() - 1]
}
}
def tobeSort = [6, 5, 3, 1, 8, 7, 2, 4]
println bubbleSort(tobeSort)
最后是scala版本
object BubbleSort {
def bubbleSort(list: List[Int]): List[Int] = {
if (list.size == 1)
list;
else {
val subList = list.foldLeft(List[Int]())((previousResult: List[Int], iterationValue: Int) => {
if (previousResult.size == 0)
previousResult :+ iterationValue
else {
val last: Int = previousResult.last
if (iterationValue > last)
previousResult :+ iterationValue
else {
previousResult.init :+ iterationValue :+ last
}
}
}
);
val last: Int = subList.last
bubbleSort(subList.init) :+ last;
}
}
def main(args: Array[String]) {
val tobeSort = List(6, 5, 3, 1, 8, 7, 2, 4);
println(bubbleSort(tobeSort));
}
}
分享到:
相关推荐
AndroidDemoIn4Languages, 在Android开发中,比较 Java Groovy Scala Kotlin 中文版 日本語 AndroidDemoIn4Languages为了了解Android开发的更好语言,用 Java 。Groovy 。Scala 和Kotlin编写了一个简单的Android应用...
标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...
You’ll also learn more advanced aspects of Groovy, such as using Groovy design patterns, writing DSLs in Groovy, and taking advantage of Groovy’s functional programming features. There is more to ...
Java、Groovy、Scala和Kotlin是四种在Java平台上广泛使用的编程语言,它们各自具有独特的特点和优势。这里我们将深入探讨这四种语言的核心特性,并对比它们在实际开发中的应用。 首先,Java作为最古老的成员,自...
书中探讨了如何在Groovy中定义类、创建对象、实现继承和多态性。Groovy的元编程能力也是一大亮点,它允许开发者在运行时修改类的行为,极大地提高了编程的灵活性。 #### 3. Groovy的动态性和元编程 Groovy的动态性...
groovy programming <br>很好很基础,坚决不简单,入门最佳 而且groovy是jvn上最好的脚本
《Programming Groovy 2》这本书是Groovy编程语言的权威指南,主要面向那些希望深入了解和使用Groovy的开发者。Groovy是一种动态、灵活的面向对象编程语言,它为Java平台带来了许多简洁和高效的特性。在Java开发环境...
### 关于《Programming Groovy 2》的知识点详解 #### 一、Groovy语言概述 Groovy是一种基于Java平台的动态编程语言,它为开发者提供了一种简洁且强大的语法结构来构建应用程序。Groovy的设计旨在与Java代码无缝...
Modern Programming Made Easy Using Java Scala Groovy and JavaScript 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...
本文将围绕“Groovy Java Genetic Programming”这一主题,深入探讨其作为开源项目的特点、功能以及实现机制,同时关注其与Jakarta Log4j库的关联。 遗传编程(Genetic Programming,GP)是一种模拟生物进化过程的...
本案例聚焦于使用Groovy脚本语言来实现一个特定的功能:从明细表中提取字段值,并将其更新到主表对应的字段中。这样的操作对于数据同步、报表生成以及业务流程自动化等场景非常常见。 Groovy是一种动态、灵活的Java...
在“groovy脚本实现对数据库的增删改查”这个主题中,我们将深入探讨如何使用Groovy来执行常见的数据库操作。首先,我们需要连接到数据库。在Groovy中,我们可以利用JDBC(Java Database Connectivity)API来实现这...
4. **DSL支持**:Groovy非常适合用于构建领域特定语言(DSL),它通过简洁的语法和强大的元编程能力实现了这一点。 5. **脚本能力**:Groovy可以用作脚本语言,用于快速编写小型脚本或执行简单的任务。 #### 与Java的...
Groovy Scala扩展模块 该的目的是提供与Scala类型的轻松互操作性。 相依性 确保已将Bintray启用为存储库: repositories { jcenter() } 然后只需将以下构建依赖项添加到您的项目中: compile '...
Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种高效、灵活且类型安全的编程环境。Scala运行在Java虚拟机(JVM)上,因此可以充分利用Java生态系统的丰富资源。学习Scala,你需要理解...
### Groovy实现领域特定语言(DSL)的知识点详解 #### 标题与描述解析 - **标题**: "groovy 一个不错的文档 实现dsl" - **描述**: "groovy 一个不错的文档 实现dsl" 标题与描述均指向了一个关于如何使用Groovy语言...
**课程标题解析:** "Udemy-Scala-Functional-Programming-for-Beginners-Rock-the-JVM" 这个标题表明这是一个在Udemy平台上专为初学者设计的 Scala 语言教程,着重于函数式编程,并且强调了如何在Java虚拟机(JVM)...
#Groovy和Scala演示 使用Groovy,Gradle,Spock来测试驱动Scala解决方案。 使用Gradle作为构建系统。 Spock和Groovy进行数据驱动测试 Scala使用一些漂亮的技巧来实现该解决方案。 练习:FizzBuzz ###步骤...