Ubuntu 中的编程语言(下)

Fortran

Fortran 语言在2010年6月编程语言排行榜中排名第三十一位。下面就是 GregorianTest.for 程序:

我没有在 Fortran 语言的标准库中找到设置指定日期的函数,只好从 1970-01-01 往回倒数 141,438 天得到 1582-10-04 。

安装 GNU Fortran 编译器,编译和运行:

[email protected]:~/work$ sudo apt-get install gfortran
[email protected]:~/work$ gfortran --version
GNU Fortran (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2010 Free Software Foundation, Inc.
GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING
[email protected]:~/work$ gfortran GregorianTest.for
[email protected]:~/work$ ./a.out
Mon Oct  4 08:05:52 1582
Tue Oct  5 08:05:52 1582
[email protected]:~/work$

运行结果和 C 语言一样。

Lua

Lua 语言在2010年6月编程语言排行榜中排名第十七位。下面就是 GregorianTest.lua 程序:

安装 Lua 软件包。luac 是编译器,用于将源程序编译为字节码,默认的文件名是 luac.out,luac –l 可以查看字节码。lua 可以作为交互窗口,也可以解释执行 lua 源程序,还可以用于运行编译后的字节码:

[email protected]:~/work$ sudo apt-get install lua5.1
[email protected]:~/work$ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(math.pi)
3.1415926535898
> (^D)
[email protected]:~/work$ lua GregorianTest.lua
Mon 1582-10-04
Tue 1582-10-05
[email protected]:~/work$ luac GregorianTest.lua
[email protected]:~/work$ luac -l
main <GregorianTest.lua:0,0> (24 instructions, 96 bytes at 0x17bf530)
0+ params, 4 slots, 0 upvalues, 0 locals, 13 constants, 0 functions
	1	[1]	GETGLOBAL	0 -2	; os
	2	[1]	GETTABLE 	0 0 -3	; "time"
	3	[1]	NEWTABLE 	1 0 3
	4	[1]	SETTABLE 	1 -4 -5	; "year" 1582
	5	[1]	SETTABLE 	1 -6 -7	; "month" 10
	6	[1]	SETTABLE 	1 -8 -9	; "day" 4
	7	[1]	CALL     	0 2 2
	8	[1]	SETGLOBAL	0 -1	; dt
	9	[2]	GETGLOBAL	0 -10	; print
	10	[2]	GETGLOBAL	1 -2	; os
	11	[2]	GETTABLE 	1 1 -11	; "date"
	12	[2]	LOADK    	2 -12	; "%a %F"
	13	[2]	GETGLOBAL	3 -1	; dt
	14	[2]	CALL     	1 3 0
	15	[2]	CALL     	0 0 1
	16	[3]	GETGLOBAL	0 -10	; print
	17	[3]	GETGLOBAL	1 -2	; os
	18	[3]	GETTABLE 	1 1 -11	; "date"
	19	[3]	LOADK    	2 -12	; "%a %F"
	20	[3]	GETGLOBAL	3 -1	; dt
	21	[3]	ADD      	3 3 -13	; - 86400
	22	[3]	CALL     	1 3 0
	23	[3]	CALL     	0 0 1
	24	[3]	RETURN   	0 1
[email protected]:~/work$ lua luac.out
Mon 1582-10-04
Tue 1582-10-05
[email protected]:~/work$

运行结果和 C 语言一样。

Lisp

Lisp 语言在2010年6月编程语言排行榜中排名第十六位。下面就是 GregorianTest.lisp 程序:

安装 GNU Common Lisp 软件包,gcl 可以作为交互窗口,也可编译源程序(使用 –compile 参数),还可以解释执行(使用 –f 参数):

[email protected]:~/work$ sudo apt-get install gcl
[email protected]:~/work$ gcl
GCL (GNU Common Lisp)  2.6.7 CLtL1    Feb 15 2010 17:57:54
Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL‘ed components: (XGCL READLINE BFD UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter
Use (help) to get some basic information on how to use GCL.
Temporary directory for compiler files set to /tmp/
>(bye)
[email protected]:~/work$ gcl -f GregorianTest.lisp
Mon 1583-01--88  seconds since 1900-01-01: -10011254400
Tue 1583-01--87  seconds since 1900-01-01: -10011168000
[email protected]:~/work$

运行结果基本和 C 语言一样,但是有一个 bug,认为 1582-10-04 是1583年1月的第 –88 天。这是一个很奇怪的 bug,其它大部分日期是正常的,如下所示:

[email protected]:~/work$ gcl -f GregorianTest2.lisp
Sun 2010-06-20  seconds since 1900-01-01: 3485980800
Mon 2010-06-21  seconds since 1900-01-01: 3486067200
[email protected]:~/work$ gcl -f GregorianTest3.lisp
Tue 1582-05-04  seconds since 1900-01-01: -10024473600
Wed 1582-05-05  seconds since 1900-01-01: -10024387200
[email protected]:~/work$

此外,还可以选择安装 GNU CLISP 软件包,clisp 是符合 ANSI Common Lisp 标准的编译器、解释器和调试器:

[email protected]:~/work$ sudo apt-get install clisp
[email protected]:~/work$ clisp
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+‘ /  I      8         8           8     8        8    8
   \  `-+-‘  /       8         8           8      ooooo   8oooo
    `-__|__-‘        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8
Welcome to GNU CLISP 2.44.1 (2008-02-23)
Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2008
Type :h and hit Enter for context help.
[1]> (bye)
Bye.
[email protected]:~/work$ clisp GregorianTest2.lisp
Sun 2010-06-20  seconds since 1900-01-01: 3485952000
Mon 2010-06-21  seconds since 1900-01-01: 3486038400
[email protected]:~/work$ clisp GregorianTest.lisp
*** - incorrect date: 1582-10-4 0:0:0, time zone NIL
[email protected]:~/work$

可以看出,GNU CLISP 不支持 1900-01-01 以前的日期。

Logo

2010年6月编程语言排行榜中排名第三十六位的 Logo 语言的原型来自 Lisp 语言,内置一套海龟绘图系统,很适合于儿童学习。下面是一个用海龟绘图的 mn_eck.logo 程序:

1:  to n_eck :ne :sz
2:    repeat :ne [rt 360 / :ne fd :sz]
3:  end
4:
5:  to mn_eck :ne :sz
6:    repeat :ne [rt 360 / :ne n_eck :ne :sz]
7:  end
8:
9:  mn_eck 36 20

安装 UC Berkeley Logo 软件包,启动交互窗口:

[email protected]:~/work$ sudo apt-get install ucblogo
[email protected]:~/work$ logo
Welcome to Berkeley Logo version 5.5
? print exp 1
2.71828182845905
? load "mn_eck.logo
? bye
Thank you for using Logo.
Have a nice day.
[email protected]:~/work$

运行结果如下所示:

我没有在 Logo 语言中找到有关日期方面的函数。如果有哪们朋友知道的话,请在评论中告诉我。谢谢!

总结

儒略历1582年10月4日星期四的下一天是格里历1582年10月15日星期五。能够正确处理的语言有:

  • Java  (使用 java.util.GregorianCalendar 类)
  • Scala (使用 java.util.GregorianCalendar 类)
  • Ruby (使用 Date 类)
  • Visual Basic.NET (使用 System.Globalization.Calendar 相关的类,必须由用户自己指定使用儒略历还是格里历)
  • C# (使用 System.Globalization.Calendar 相关的类,必须由用户自己指定使用儒略历还是格里历)
  • F# (使用 System.Globalization.Calendar 相关的类,必须由用户自己指定使用儒略历还是格里历)
  • PHP (使用 cal_to_jd 和 cal_from_jd 函数,必须由用户自己指定使用儒略历还是格里历)

把格里历外推到1582年10月15日之前,取代儒略历,从而认为1582年10月4日是星期一的语言有:

  • Visual Basic.NET (使用 System.DateTime 类)
  • C# (使用 System.DateTime 类)
  • F# (使用 System.DateTime 类)
  • C (GNU C 编译器,使用 tm 结构和 mktime 函数)
  • C++ (使用 boost::gregorian::date 和 date_duration 类)
  • Python (使用 date 和 timedelta 类)
  • JavaScript (使用 Date 类)
  • Perl (使用核心模块的 localtime 和 timelocal 函数,或者使用 DateTime 模块)
  • Fortran (使用 ctime 函数,必须由用户自己从 1970-01-01 倒数 141,438 天得到 1582-10-04)
  • Lua (使用 os.time 和 os.date 函数)
  • Lisp (使用 GNU Common Lisp 软件包,使用 encode-universal-time 和 decode-universal 函数)

认为1582年10月有4日是星期二或者星期六(很奇怪的决定)的语言有:

  • PHP (使用 DateTime 类)
  • Delphi (使用 Free Pascal 编译器,使用 TTimeStamp 类型和 EnCodeDate、DateTimeToTimeStamp 函数)

标准库不支持1582年10月4日,或者无法计算某一日期是星期几的语言有:

  • C (Microsoft Visual Studio 2010 的 C++ 编译器,使用 tm 结构和 mktime 函数)
  • Pascal (使用 GNU Pascal 编译器,使用 TimeStamp 类型和 GetTimeStamp 函数)
  • Lisp (使用 GNU CLISP 软件包,使用 encode-universal-time 和 decode-universal 函数)
  • Logo (使用 UC Berkeley Logo 软件包,没有找到有关日期的函数)

版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。

时间: 2024-08-02 20:45:06

Ubuntu 中的编程语言(下)的相关文章

Ubuntu中python环境下import requests错误的解决(学习过程问题记录)

python中导入模块:import requests提示错误,错误信息描述如下: >>>import requests Traceback (most recent last):   File "<stdin>", line 1, in <module> ImportError:No module named requests 意思就是说没有名为requests的模块,解决方案是在命令行下使用 pip install requests 来进行

Ubuntu 中的编程语言(上)

Java 让我们从2010年6月编程语言排行榜中的第一名 Java 开始吧.下面就是 GregorianTest.java 程序: 1 2 3 4 5 6 7 8 9 10 11 12 import java.util.*; public class GregorianTest {   public static void main(String[] args)   {     GregorianCalendar dt = new GregorianCalendar(1582, 10 - 1,

win764bit下Eclipse连接ubuntu中hadoop2.6经验总结

作为初学者,总结一下配置hadoop2.6的心得体会. 首次配置时采用虚拟机中运行Ubuntu14.04,直接配置hadoop2.6,并在其中运行Eclipse.于自己的机子性能较为一般(4核+4G),尝试几个案例时就出现卡的现象.后来尝试CYGWIN代替Ubuntu,但各种配置问题不断产生,不得不放弃.改为在win7(64bit)下采用Eclipse连接ubuntu中hadoop2.6,为了提升性能,ubuntu改为命令行模式下启动,去掉图形化界面. Ubuntu下配置hadoop2.6并没遇

解决Ubuntu中vi命令的编辑模式下不能正常使用键盘问题

在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,会输出ABCD,以及退格键也不能正常删除字符.这是由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full,解决方法很简单,只需要以下两步: 步骤一,输入下述命令以卸载vim-tiny: sudo apt-get remove vim-common 1 1 步骤二,输入下述命令以安装vim-full: sudo apt-get install vim

Linux 桌面玩家指南:17. 在 Ubuntu 中使用 deepin-wine,解决一些依赖 Windows 的痛点问题

特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之间的内容按照数学公式进行排版,从而导致评论区格式混乱.如果大家的评论中用到了$,但是又不是为了使用数学公式,就请使用\$转义一下,谢谢. 想从头阅读该系列吗?下面是传送门: Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论 Linux 桌面玩家指南:02. 以最简洁的方式打造实用的

在Ubuntu中安装Docker

前言 网上已经有很多介绍Docker安装的文章,自己的安装过程记录一下,为了博客文章结构的连贯性,为写下一篇R和Docker的相遇做为环境基础,同时也给自己一个备忘. 目录 Docker是什么? 在Linux Ubuntu中安装Docker Docker镜像仓库 制作自己的Docker镜像 上传Docker镜像到公共仓库 完整文章:http://blog.fens.me/linux-docker-install/

如何在ubuntu中搭建ruby开发环境

Ubuntu是一个以桌面应用为主的linux操作系统,在进行项目开发的时候,需要在ubuntu中安装ruby开发(http://www.maiziedu.com/course/ruby-px/)语言,主要是考虑到项目的高可变性,以及由此产生的高适应性,所以选择用ruby.跟Java相比,ruby的确比较灵活,能写出千变万化的代码. 但是,比较可悲的是,在windows7上面搭建ruby环境问题比较多.无论是基于cgywin,还是直接使用netbeans都不尽如人意. 因为想调整webserver

ubuntu中的django安装配置与操作

1 在对django安装(http://www.maiziedu.com/course/others/307-3024/)前,我们要确保python软件已经安装,ubuntu中默认有安装的.我们只需要安装django即可,解压django压缩文件,进入解压后的文件夹,运行,python setup.py install即可安装django到python中. 2 创建django项目,首先在任意位置创建文件夹,这里是在python用户下创建work文件夹,接着进入work运行一下命令即可创建dja

Ubuntu中使用source报错处理办法

最近一段时间在使用Bash on Ubuntu on Windows做shell脚本调试时发现在脚本中使用source时会报错,上网查了下才了解到原来是在Ubuntu中使用的并不是bash,而是使用优化过的dash,而在dash中是没有source,而在bash中才有source,这就有点麻烦了,平时在写脚本时有时会调用系统的function和一些自定义的function,没有source确实有点不太方便,而在此时可以在使用dpkg-reconfigure来修改配置dash,在平时可以用以下方法