`
hackwaly
  • 浏览: 8446 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

编程语言设计之路-3-部分函数式语法

阅读更多

函数式将会成为主流, 主要原因我就不说了, 网上多有介绍, 我这里说一下我个人认为网上没有提到的几点.

1, 函数式比命令式语言更加纯粹. 语法少很多

2, 不再为临时变量而纠结. 函数式中没有循环, 使用嵌套函数(闭包)+递归可以替代循环, 而且编译出来的代码, 应该差不多的. 好处呢看个简单的例子, 一个比较长的函数的话, 往往中间很多临时变量, 那些变量到后来有没用到, 在命令式语言里是不能直接看出来的, 而使用闭包, 就能清晰的将临时变量划到闭包中, 临时变量不再纠结. 更多时候还能避免全局变量的使用. 代码更加的清晰.

3, 函数式更便于思维, 仔细想一下, 递归的函数更容易想出来呢还是循环的版本?

 

说到这里, 我想起javascript了, 很纠结的语言, 由于闭包的实现方式是使用scopechain, 所以其函数式代码的性能降低了很多.

 

这两天有一点状态, 设计了一个语法解决了很多纠结的地方(示例代码中的其他语法并未定, 只是为了举例而随便选的一种)

看看这一个语法(注意其纯粹性, 是一个语法, 其实就是增加一个函数左侧实参的语法)

1,

someFunc(obj: SomeObj){}

o = new SomeObj

纠结的版本:

someFunc(o)

使用该语法的版本:

o->someFunc

2,

如要写程序打印1到100的和是多少

print 100 -> sum(n) {

  n == 1 ? 1 : n + sum(n - 1)

}

看看纠结的版本:

print(function sum(n){

  return n == 1 ? 1 : n + sum(n -1);

}(100));

这里忽然想说一下我的这个语言中常量表达式的定义, 常量表达式由其他常量表达式组成, 可以是字面量或者纯函数(没有副作用的函数), 所以可以看到我们这里的100 -> sum(n) 其实是一个常量表达式, 是可以在编译期决定值的. 而print函数是IO函数, 不是纯函数. 所以优化后的代码大概是5050 -> print

3,

额外的功能(其实就是carry, 如果要更灵活的carry就自己redefine吧)

redefine版本:

pow2(n){ pow(2, n) }

使用该语法的版本:

pow2 = 2 -> pow

 

为了纯粹性正在考虑是否放弃右侧实参.

 

 

模式匹配语法, 正在考虑是否用类似下面的

a == {

| 1 => "mon"

| 2 =>"tus"

| ""

}

考虑第一个竖杠是否可以省略

a instanceof {

| A => A.typi

| B => B.typi

| Object.typi

}

模式匹配理论上讲是顺序匹配的, 但是如果左侧的大部分是常量的话, 可以将那一部分优化成接近switch的哦.

a -> {

| cond_func1 => 1

| cond_func2 => 2

}

左侧表达式是可以用函数的

isItemInArray = item == {| array.each }

左侧表达式可以是迭代器, 右侧为空匹配时默认返回true, 都不匹配时无默认值则默认返回false

 

模式匹配语法让if elseif不再纠结. 减少了一些重复代码. 更重要的是代码看起来更清晰.

分享到:
评论
1 楼 xkyle 2011-06-23  
我个人认为,新一代的编程语言,将是,人工智能算法。呵呵
for example:


Robot:go 100km right now //机器人的大脑会记录这件事

//回忆机制,而不是反射机制
Rotbot do what right now: go
follow up,how much go: 100km

FireRobot go 100 km like Robot //模仿,而非 继承
who FireBot go like : Robot //回忆
 
that's cool;
这是我的思路,面向人类,或者说面向AI,或者说就是 人类语言,更贴近自然语言

如果写一段语言, i want to print 1 to 100 on screen
i >主语
want >动词
to >意向词
print>动作,指令
1 to 100 > 数字1到100,智能识别AI,不关心 1,100的数据类型,这个后台处理
on >介词
screen> 名词

我们不关心数据类型,这省掉很多事

没有循环的概念。

FireRobot search fire from (x,y) to (x1,y1)  find kill






常规代码,的数量可想而知


function Robot(){}
Robot.prototype.go=function(m){};

var r=new Robot();
r. go(100);
print go?办不了
print go how much ?办不了
当然,也能实现,相当复杂。

相关推荐

    《JavaScript语言精髓与编程实践》精选版--动态函数式语言精粹

    本文主要有“命令式语言”、“函数式语言”和“动态语言”三个部分,均精减自《JavaScript语言精髓与编程实践》一书的相应内容。本文最末一个部分,对几种语言作一综述,一孔之见而已。 本书目录 目录 精简版·序...

    Java-Java函数式编程教程

    Stream API的设计非常适合函数式编程,因为它鼓励使用声明式编程风格,而不是命令式风格。 4. **Optional类**: Optional是一个容器类,代表一个值存在或不存在。它帮助防止空指针异常,鼓励程序员显式处理缺失值...

    Scala函数式编程

    Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写...

    ios-简单便捷的函数式编程--view的frame设置.zip

    在iOS开发中,我们通常使用Swift语言,Swift虽然不是纯函数式语言,但它的语法特性支持了函数式编程风格。例如,高阶函数、闭包和类型推断等特性,使得我们可以在Objective-C的基础上更轻松地实现函数式编程。 在...

    Python-现代Fortran的函数式编程

    在IT领域,Python和Fortran都是重要的编程语言,各自在特定的场合下有着出色的表现。本文将探讨如何在Fortran中应用函数式编程思想,并结合Python的开发实践,揭示这两种语言在函数式编程上的交互与融合。 Fortran...

    程序设计语言实践之路-1_lisp_python_

    《程序设计语言实践之路-1_lisp_python_》是一本深度探讨编程语言理论与实践的书籍,它将传统的程序设计语言教科书内容与编译原理相结合,同时加入了关于汇编层体系结构的基础知识,旨在为那些没有计算机组织背景的...

    Python-Python受LISP启发的函数式编程思想

    LISP是一种早期的高级编程语言,以其简洁的语法和强大的函数式编程能力著称。在Python中,我们也能看到很多LISP的影子,尤其是在使用函数、高阶函数、闭包以及列表推导等方面。 函数式编程是一种编程范式,它将计算...

    c#编程新语言----好书

    《C#编程新语言》是一本专为初学者设计的优秀教材,旨在系统地引导读者掌握C#这门强大的编程语言。C#是由微软公司开发的一种面向对象的编程语言,广泛应用于Windows桌面应用、游戏开发、移动应用以及云计算等领域。...

    Python-Forest是一种编译为WebAssembly的函数式编程语言

    Python-Forest是一个独特的编程语言,它以其函数式编程特性为亮点,并能编译成WebAssembly(WASM)代码。这一特性使得Forest能够在各种平台上运行,包括浏览器环境,为开发者提供了一种高效、跨平台的解决方案。 **...

    C# 的函数编程详解

    C#作为一门多范式的编程语言,不仅支持面向对象编程,还提供了丰富的函数式编程特性。 1. **函数作为值** 在函数式编程中,函数被视为一等公民,可以作为变量赋值、作为参数传递给其他函数,甚至作为其他函数的...

    使用clean函数式编程

    - **Clean语言**是一种现代化的纯函数式编程语言,它具有并发处理能力,适用于教育、研究以及实际应用开发。 - **特点**:与Miranda、Haskell和ML等其他现代函数式语言有许多共同之处,同时提供了额外的支持用于独立...

    无涯教程(LearnFk)-函数式编程教程离线完整版.pdf

    函数式编程语言可以分为两类: 1. 纯函数式语言:这类语言仅支持函数式编程范式,例如Haskell。它们的特点是,不支持命令式编程,如循环和条件语句,而是通过递归和条件表达式来进行计算。 2. 不完善的函数式语言:...

    编程语言原理(第10版

    根据提供的标题“编程语言原理(第10版)”及描述“编程语言原理(第10版 编程语言原理)”,我们可以推断出这本书主要讲述了编程语言的基础理论与实践应用,是学习和理解编程语言设计与实现的重要参考资料。...

    Python-Lift编程语言高性能可移植的函数式GPU编程语言

    Lift编程语言是一种专注于GPU(图形处理器单元)编程的高性能、可移植的函数式语言。它的设计目标是提供一个简洁、高效且易于理解的语法,以便开发者可以充分利用GPU的并行计算能力。由于GPU在处理大规模数据并行...

    [本科毕业设计] 简单的函数式语言实现(编译器+解释器).zip

    【本科毕业设计】“简单的函数式语言实现(编译器+解释器)”是一个典型的计算机科学项目,旨在让学生深入了解编程语言的内部工作原理,特别是函数式编程语言。在本设计中,学生将面临编译器与解释器的设计与实现,这...

    程序设计语言-实践之路第四版

    2. 编程语言理论基础:书中应当涵盖了编程语言的一些核心理论,例如编程语言的定义、分类(命令式、函数式、逻辑式等)、编程范式以及它们之间的区别和联系。 3. 语义和语用的详细阐释:语义学是研究语言的意义的...

    Spark技术实战之基础篇 -Scala语言从入门到精通 Scala编程详解 含课件和资料 共21个章节.rar

    面向对象编程之类第13讲-Scala编程:面向对象编程之对象第14讲-Scala编程:面向对象编程之继承第15讲-Scala编程:面向对象编程之Trait第16讲-Scala编程:函数式编程第17讲-Scala编程:函数式编程之集合操作第18讲-...

    java8源码-new-Java:算法并发函数式编程java语言拾遗手写设计模式

    函数式编程 │ │ ├─lang Java语言拾遗 │ │ └─util 工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:...

    函数式编程概要

    λ演算是由美国逻辑学家阿尔弗雷德·丘奇(Alonzo Church)提出的,它是现代函数式编程语言的基础之一。 #### 四、λ演算简介 λ演算是一种形式化的数学理论,用于研究函数抽象和应用的形式化表示方法。它的语法非常...

Global site tag (gtag.js) - Google Analytics