Coding Poet, Coding Science

Keep Stupid, Keep Hungry


  • 归档

  • 分类

  • 标签

  • 资源

  • 关于

  • 搜索
  • 简体中文
  • English (US)
close
Coding Poet, Coding Science

Scheme语言概要

发表于 2015-08-31 | 更新于 2016-12-14 | 分类于 计算机科学 , 编程语言 |

在人工智能语言中我们应该接触过Scheme。根据介绍,Scheme和CommonLisp是两种主要的Lisp方言之一,也就是说,在讲Lisp语言的时候,我们也包括了讲Lisp或者CommonLisp语言。Scheme语言的地位是由一系列的Lambda论文决定的。见https://en.wikipedia.org/wiki/History_of_the_Scheme_programming_language#The_Lambda_Papers。Scheme的后缀扩展名是.scm或者.ss。Scheme是动态强类型的语言,具有词法作用域,当然是函数式语言。此外,Scheme的特点是它是第一个实现了头等延续的语言(这里的延续指的是计算机程序的控制状态,头等延续指的是可以创建,保存、赋值程序的状态给一个变量,并根据需要恢复程序的运行上下文)。对于延续的介绍可见https://en.wikipedia.org/wiki/Continuation。

Scheme对于CommonLisp的设计产生了重要的影响。Scheme的开发其实是基于实现当时的Actor并发模型的思想。Scheme的最新标准是R7RS,制定于2013年。

描述Scheme的最佳的方式或许是这样的。首先,Scheme的语法风格来自于简洁的S-表达式。然后数据结构是基于表处理的,刚开始的时候我们会看到很多的表处理的模式(如果有可能的话,我们也可以在其它的编程语言中模仿它),这种表处理的模式导致了我们很容易在运行的时候动态地创建Scheme代码。另外就是,它支持头等函数。虽然声称Lisp是函数式语言,但是其实Lisp的基本思想其实并不是高阶函数,而是所谓的抽象重写系统。另外的特点,就是对于\(\lambda\)-演算和词法作用域的支持了。

阅读全文 »
Coding Poet, Coding Science

Maude语言

发表于 2015-07-22 | 更新于 2016-12-14 | 分类于 编程语言 |

Maude是一个使用重写逻辑的语言,由SRI开发。Maude的Rewritting Logic是对Equational Logic的一个扩展。Maude非常强调元编程的概念。Maude也可以看成是一种逻辑编程语言、Logic Programming Language、Extensible syntax Programming Language、Term-rewriting programming Language。

Maude语言和Mathematica是类似的,但是也许比Mathematica在语言的表现力方面上更强大。本身的计算也是基于模式的匹配,当然是非常自然的。这种项重写跟Mathematica的原理是类似的。

高级的编程语言大概都能应用于软件规约,以及逻辑编程语言也可以。Maude有一系列的模型检查的库,这可能是它具有优越性的地方http://maude.cs.illinois.edu/w/index.php?title=Maude_Tools。

阅读全文 »
Coding Poet, Coding Science

Scala编程概要(三):进程控制与shell,函数式特性

发表于 2015-07-02 | 更新于 2016-12-14 | 分类于 编程语言 , Scala |

应该说,这种特性是可以让人大吼大叫的。简单的示例如下:

import sys.process._
"ls -al .." !

之所以可以这样做,是因为sys.process包含一个从字符串到ProcessBuild对象的隐式类型转换。注意后面的!号操作符,以ProcessBuild类型为参数类型,返回的是被执行程序的返回值。如果需要返回的是程序的输出的字符串,可以使用!!代替!号。

阅读全文 »
Coding Poet, Coding Science

Scala编程概要(四):控制抽象, 集合, 模式匹配, 编译器

发表于 2015-07-02 | 更新于 2016-12-14 |

Scala的控制抽象

Haskell有自己的抽制抽象。使用的是单体。但是在Scala中,没有必要做得那么纯函数式。所以为了调用控制流,Scala使用了() => Unit类型。比如说,我们要在某个线程当中创建一个过程:

runInThread() { () => println("Hi"); Thread.sleep(1000); println("Bye") }

其中定义的runInThead函数是:

def runInThread( block : () => Unit) {
    new Thread {
        override def run() { block() }
    }.start()
}
阅读全文 »
Coding Poet, Coding Science

Scala编程概要(二):基本结构,常用模式

发表于 2015-07-01 | 更新于 2016-12-14 | 分类于 编程语言 |

设计模式在软件编程的各个方面都有应用。MVC与分布式一般算成是架构模式,而写文档注释也有一定的模式可以遵守。另外,我们也可以设计出一些使用的模式,以便在开发软件之后,可以让用户按照指定的模式使用软件。

Scala的for语句

在scala当中,for并不是经典的控制流语句而已。在for里面可以加一些过滤器,同时,也可使用yield来生成一个集合。这种控制语句应该是与Map-Reduce相互配合的。而且为了支持新的范式,也需要修改for语句的行为。

对于非递归的函数,scala不需要指定返回的类型。这是因为,虽然hindley-Milner算法能够推断出递归函数的返回的类型,但是在面向对象的语言中却并不是总是可以行得通的。所以,在处理递归函数的返回类型上,Scala并没有使用Hindley-Milner类型推断算法。

阅读全文 »
1234…11
Istyasna

Istyasna

GO FORTH now and create masterpieces of the publishing art!

55 日志
36 分类
189 标签
RSS
GitHub Aliyun
Creative Commons
Links
  • Homepage
  • Hainan University
  • Qi Qi
© 2016 - 2017 Istyasna
由 Hexo 强力驱动
主题 - NexT.Mist