`
hackwaly
  • 浏览: 8178 次
  • 性别: 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语言精髓与编程实践》一书的相应内容。本文最末一个部分,对几种语言作一综述,一孔之见而已。 本书目录 目录 精简版·序...

    Scala函数式编程

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

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

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

    Functional-Magic-Book:函数式编程入门书籍《函数式魔法学》书稿

    Functional-Magic-Book函数式编程入门书籍《函数式魔法学》...cc是什么抽象语法树type rich programmingRust语言中的生命周期系统在工程中的各种实践函数式编程下的Web服务器实践Parser与Parser CombinatorsGUI编程与

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

    Forest是一种编译为WebAssembly的函数式编程语言。 这个库包含编译器和核心语法,目前在Haskell中实现。

    Elixir(函数式编程语言软件)v1.5官方免费正式版

    Elixir是一款免费的函数式编程语言,采用一种动态语言,灵活的语法和宏支持,建立在Erlang虚拟机之上,来构建并发、分布式、容错应用程序及热代码升级。软件功能强大,界面简洁,是您进行函数式编程的首选,需要的...

    mojo编程语言.docx

    它被设计为一种简洁、灵活且易于学习的语言,具有许多现代编程语言的特性,如动态类型、函数式编程、以及面向对象编程等。下面是关于Mojo编程语言的一些介绍: 1. **简洁易读的语法**:Mojo采用了简洁易读的语法,...

    函数式Swift

    Swift 是一门有着合适的语言特性来适配函数式..., 《函数式Swift》是一本引领你进入Swift 函数式编程世界的优秀读物,它让更多的中国开发者有机会接触并了解Swift语言函数式的一面,是广大程序开发者不可多得的工具书。

    论文研究-函数式语言泛型特性的研究与实现.pdf

    在函数式语言上进行泛型的研究与应用,Haskell语言是函数式语言中较为经典的一种语言,它的计算模型简单,语法清晰,易于编写,易于维护,拥有很大的发展空间。利用一些规则对Haskell语言的语法进行相关扩展,同时...

    Swift语言编程案例讲解.pdf

    Swift是由苹果公司开发的一种编程语言。它被设计用于开发iOS、macOS、watchOS和tvOS等苹果操作系统的应用程序。Swift语言结合了C和Objective-C的特性,拥有现代化和易于学习的语法。 Swift语言具有以下特点: 安全...

    我眼中的JavaScript函数式编程

    看过许多关于函数式编程的讲解,但是其中大部分是停留在理论层面,还有一些是仅针对Haskell等纯函数式编程语言的。而本文旨在聊一聊我眼中的函数式编程在JavaScript中的具体实践,之所以是“我眼中的”即我所说的仅...

    函数式变成思维

    本书脱离特定的语言特性,...知名软件架构师Neal Ford为我们展示不同的编程范式,帮我们完成从Java命令式编程人员,到使用Java、Clojure、Scala函数式编程人员的完美转变,建立对函数式语言的语法和语义的良好理解。

    Python语言程序设计习题答案.zip

    组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练...

    Python 核心编程 第二版.azw3

    第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程...

    Haskell-1:使用Haskell进行函数式编程

    函数式编程和Haskell语言简介。 基本概念和语法。 纯粹的功能和不变性。 从函数开始,键入签名并使用递归解决问题。 类型和类型类之间的区别。 (x:xs) -列表和列表问题。 模式匹配。 高阶函数-完整的软件包。 ...

    Elixir编程入门

    Elixir是一门建立在Erlang虚拟机上的函数式的系统编程语言,支持元编程。创始人José Valim是ruby界的知名人士。 私以为,可以把Elixir看作函数式的ruby语言,或者是语法类似ruby的Erlang。Elixir受瞩目的原因,是...

    编程新手真言......

    7.12 元编程和函数式编程 159 7.13 C++的模板编译技术本质 161 7.14 OO的缺点 161 7.15 模板的继承 162 7.16 模板的偏特化 162 7.17 真正的策略 162 7.18 为设计产生代码 164 7.19 真正的metaprogramming 165 7.20 ...

    函数式元编程语言的设计要素*) (2006年)

    以MetaML和Template Haskell为例论述在函数式语言中为了支持元编程需要扩展的机制,包括语法、语义、类型系统、安全的变量使用等,以及它们的实现方案、各方案的特点。最后总结一些元编程系统的共同点,并预测未来的...

Global site tag (gtag.js) - Google Analytics