`
RednaxelaFX
  • 浏览: 3048136 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

程序设计语言概论 课程相关杂记

阅读更多
笔记都记在笔记本上了,这边记点side-story一般的杂记吧。

到计算机系去旁听了马晓星老师上的程序设计语言概论。周二的第一次课的时候还不知道有这课所以没去。周五(2008-02-22)去跟了第二次课。

接下来准备要讲到Scheme了。到http://www.scheme.com抓了Petite Chez Scheme 7.4的档。

-----------------------------------------------------------------

不知道有多少人关注过Euphoria这种语言。与许多脚本语言一样,它是一种very-high-level语言。不过它宣称自己非常简单而且非常快——官网上的资料称它的先进的解释器比传统的Python和Perl的解释器快30倍。速度就罢了,发展到某个阶段之后大家都会说自己很快的……
它更重要的一个特点应该是它最主要的数据结构,sequence。字串在Euphoria中不过是sequence的语法糖。Sequence本质上是一种线性的异质容器,可以通过下标来访问其中的元素;元素可以是atom或者sequence。下标只能作用于变量(而不能作用于表达式,于是date()[2]这种写法就不行)。
还没仔细看,不过乍一看这sequence跟Lisp里的list看起来好像。于是给我一种直观的感觉,Euphoria就像是命令式的Lisp一般;不过Euphoria貌似没S-expression用。接下来看Scheme相关的时候也顺带一起看看Euphoria来对比吧。

Euphoria中“类型”的意味与其它语言很不一样。由于atom只是数值,则由atom而构成的sequence以及包含有sequence的sequence到最后都肯定是数值。结果user-defined type就变成了数值范围的检查……
type hour(integer x)
    return x >= 0 and x <= 23
end type

hour h1, h2

h1 = 10      -- ok
h2 = 25      -- error! program aborts with a message


Euphoria支持结构化程序设计语言的三种经典结构:顺序,分支,循环。
常见的语法结构都在,if-then-else、for、while等。

Euphoria例子:(来自官方文档
sequence list, sorted_list

function merge_sort(sequence x)
-- put x into ascending order using a recursive merge sort
    integer n, mid
    sequence merged, a, b

    n = length(x)
    if n = 0 or n = 1 then
        return x  -- trivial case
    end if

    mid = floor(n/2)
    a = merge_sort(x[1..mid])       -- sort first half of x
    b = merge_sort(x[mid+1..n])     -- sort second half of x

    -- merge the two sorted halves into one
    merged = {}
    while length(a) > 0 and length(b) > 0 do
        if compare(a[1], b[1]) < 0 then
            merged = append(merged, a[1])
            a = a[2..length(a)]
        else
            merged = append(merged, b[1])
            b = b[2..length(b)]
        end if
    end while
    return merged & a & b  -- merged data plus leftovers
end function

procedure print_sorted_list()
-- generate sorted_list from list
    list = {9, 10, 3, 1, 4, 5, 8, 7, 6, 2}
    sorted_list = merge_sort(list)
    ? sorted_list
end procedure

print_sorted_list()     -- this command starts the program

注意:(2008-02-22)今天老师上课的时候提到了C-like语言里使用花括号来表示代码块的特征。这种语言设计有一个*不太好*的地方,那就是无论是什么语句块都同样以“}”结束,很容易让人对错括号。所以会有在“}”之后标注语句块类型的注释习惯,例如:
while ( !done ) {
    switch ( code ) {
    case OP_ADD:
        if ( otherCond ) {
            // ...
        } else {
            // ...
        } // if-else
        break;
    // ...
    default:
        // ...
        break;
    } // switch
} // while

要从语言级别根除这个问题,最直观的方式就是“强制”在块的结尾标明语句块的类型。于是很自然的就演变成了类似“end function”“end if”的形式。

习惯真是魔鬼。之前很长一段时间都没办法从C-like语法的惯性中摆脱出来。直觉上不喜欢Pascal也是因为它不是curly-brace系的语言。呵呵,真糟糕。

-----------------------------------------------------------------

(2008-02-24 16:30)刚才在看Channel 9上的Lang.NET 2008相关报道。其中一篇,[url=Dan Ingalls and Allen Wirfs-Brock: On Smalltalk, Lively Kernel, Javascript and Programming the Internet]http://channel9.msdn.com/Showpost.aspx?postid=380959[/url],Dan在讲到JavaScript时提到了对“clean language”的看法,说如果一种语言提供了太多冗余的构造去做同一件事,那么它就不够“clean”。我对这种说法的理解还是不够充分。如果说JavaScript加入了class支持而不抛弃prototype-based的设计,那或许是很冗余,但现在的ECMAScript 3应该还算干净吧(但一点也不“简单”)。
想想看,通过closure来模拟对象,这也是一种强大的能力。当需要一个只有一个公共方法,而又需要保持内部状态的对象时,直接定义一个函数去返回一个内部嵌套的函数,让后者所持有的闭包去保持状态就行。Consise, no?

-----------------------------------------------------------------

(2008-02-28 23:00)突然在想,编程语言最大程度的灵活度莫非就是意味着无类型么。
任何数据结构都可以用表(list)来模拟。记录(record)或者结构(struct)都可以被表模拟。很多不支持记录/结构的语言都会建议使用数组来模拟这类语言构造,而这时候的“数组”也就是一个list。Lisp系的语言依靠表而获得了强大的语言能力(当然更重要的是表的应用方式——S-expression),上面的Euphoria看来也是如此。
不过,一种语言中对表的操作要是只支持CAR/CDR/CONS,而没有下标索引的话,感觉还是稍微缺点什么?
假如索引不限定使用非负整数,而是可以使用任意类型的数据(例如字符串)的话,那不就是泛型的关联数组了么?让我想到ECMAScript……

胡思乱想而已,总之先记下来。

-----------------------------------------------------------------

最近动态语言越来越热门,其中有不少都支持3个C的language constructs:closure、coroutine、continuation。闭包(closure)只在遵循lexical scoping的语言中出现,与嵌套作用域相关。coroutine与continuation都与“保留当前运行状态”相关;前者是说函数能保留自身的执行状态,并能将控制交给(yield)别的函数;后者是说系统能保存当前的执行状态(也就意味着要保存整个运行时stack),并在以后的某个时候能够恢复到先前保存过的某个状态继续执行。(以上描述纯粹是我现在对这3个C的理解,未必正确)。

-----------------------------------------------------------------

根据worse-is-better原理,我一直喜欢的一些feature看来不少都是"worse"的一类呢。诶,原本对ECMAScript 4那么热衷的我,最近越来越觉得它kitchen-sink得太过头了。正所谓“核心概念”太多,使得语言肿胀……
分享到:
评论
1 楼 lwwin 2008-02-23  
对ENDIF还是特别的反感……其实开始的时候一直用的是BASIC的……
直觉上只是觉得{}清爽……
反正只要是类似VC或者编辑器支持JMP&CHECK就可以了^-^

相关推荐

    推选文档程序设计语言概论PPT.ppt

    【程序设计语言概论】课程概述 这门课程由南京大学计算机软件新技术国家重点实验室的马晓星教授主讲,旨在深入探讨程序设计语言的基本原理、实现技术和评估方法。课程不仅适合计算机科学与技术专业的学生,也对软件...

    程序语言设计概论第三次作业答案

    标题中的“程序语言设计概论第三次作业答案”指的是一个关于程序设计语言理论的课程作业,主要涉及Scheme编程语言。描述中的“希望有帮助!”表明这是一个共享的答案资源,目的是帮助他人解答作业问题。 从标签中...

    北京大学程序设计语言概论考试复习.docx

    程序设计语言概论是一门深入探讨编程语言理论和实践的课程,涵盖了语言的定义、特征、设计、实现以及语法和语义等多个方面。这门课程对于理解计算机科学的核心概念至关重要,特别是对于想要从事软件开发、系统设计...

    程序设计语言概论PPT学习教案.pptx

    程序设计语言概论PPT学习教案.pptx

    计算机系统概论论文-了解程序设计语言的发展及应用.docx

    "计算机系统概论论文-了解程序设计语言的发展及应用" 这篇论文的目的是为了了解程序设计语言的发展及应用,帮助读者了解计算机系统的概论和程序设计语言的种类、特点及应用。 一、序论 程序设计语言是计算机系统...

    数据库系统概论课程设计

    通过这个课程设计,学生不仅能深入理解数据库系统的理论知识,还能提高实际操作和问题解决能力,为未来从事数据库相关工作打下坚实基础。在"网吧管理系统5-吴忠军"这个项目中,我们可以期待看到一个完整的、能够满足...

    程序语言设计概论7次作业标准答案

    这七份作业标准答案(HWA1至HWA7)提供了对课程核心概念的详细解答,旨在帮助学生理解和掌握程序设计语言的关键要素。 在HWA1中,可能涉及到的基础知识点可能包括编程语言的基本语法结构,如变量声明、数据类型、...

    数据库系统概论 课程设计

    【数据库系统概论 课程设计】的项目是一个用于管理企业员工工资的系统,旨在提高工作效率,确保信息准确。系统包含了人员信息管理和工资管理的核心功能,适用于中小企业和失业单位。设计内容包括了数据库表格的设计...

    第2章 Java程序设计语言概论.ppt

    Java程序设计语言是互联网开发领域中的重要工具,其发展历程始于1991年Sun公司的Green工程,旨在为消费类电子产品创建一种控制语言,最初命名为Oak。随着互联网的迅速发展,1994年,SUN推出了HotJava浏览器,进一步...

    数据库概论课程设计报告

    ### 数据库概论课程设计报告知识点解析 #### 一、项目背景与意义 - **项目背景**:随着教育信息化的推进以及高等教育规模的不断扩大,传统的手工管理学生信息的方法已无法满足高效、准确处理大量学生信息的需求。...

    清华大学AI人工智能概论课程 第6章 深度学习 含习题 共65页 .pptx

    清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....

    电子政务概论课程形成性考核册答案.pdf

    电子政务概论课程形成性考核册答案.pdf

    程序语言设计概论第七次作业答案

    在参数传递方面,程序设计语言通常支持按值传递和按引用传递。按值传递创建参数副本,子程序内部的修改不会影响外部变量,而按引用传递则允许子程序直接修改外部变量。当子程序因异常中断时,如果异常被抛出并由外部...

    民航概论课程标准.pdf

    民航概论课程标准.pdf

    数据库系统概论课程设计实验报告 山东科技大学

    - 《C程序设计(第三版)》:谭浩强主编,清华大学出版社。 - 《数据库系统实现》:杨冬青,唐世渭,徐其钧等译,机械工业出版社。 为了实现这些功能,学生需要设计和实现表的物理存储结构,包括理解如何在磁盘上...

    游戏程序设计概论范例文件

    本压缩包中的"游戏程序设计概论范例文件"提供了深入理解这一领域的关键示例,旨在帮助学习者通过实际代码来探索游戏开发的核心概念。 游戏程序设计的基础始于编程语言的选择,如C++、C#或Python等。这些语言为创建...

    《数据库概论》课程设计实验报告书

    通过以上知识点的梳理,我们可以看到,《数据库概论》课程设计实验报告书不仅涵盖了理论知识的学习,还强调了实践技能的培养,旨在让学生全面掌握数据库系统的设计、开发和测试全过程,为将来从事IT行业的相关工作...

    数据库系统概论课程设计文档

    ### 数据库系统概论课程设计文档 #### 一、题目:学生管理系统 #### 二、设计目标与要求 本设计的目标是开发一个学生管理系统,该系统主要包括三个核心模块:学籍管理、考勤管理和成绩管理。通过这三大模块,可以...

Global site tag (gtag.js) - Google Analytics