精华内容
下载资源
问答
  • 标点符号的用法

    2010-11-16 10:19:39
    1. 概述 标点符号是书面语中一系列表停顿、节奏和语调等的符号,用以表示句子或句子成分的隔离或特指。如:China is in Asia....(感叹号特指惊讶或赞赏)英语常用标点符号与汉语的标点符号比较: ...

    1. 概述

    标点符号是书面语中一系列表停顿、节奏和语调等的符号,用以表示句子或句子成分的隔离或特指。如:
    China is in Asia. It is a vast and beautiful land.
    中国地处亚洲。它幅员辽阔而美丽。
    (
    句号在两句之间起隔离作用)
    How calm the sea is!
    大海多么平静啊!(感叹号特指惊讶或赞赏)
    英语常用标点符号与汉语的标点符号比较:

    英语标点符号

    汉语标点符号

    符号

    名称

    符号

    名称

    period (full stop)

    句号

    comma

    逗号

    colon

    冒号

    Semicolon

    分号

    question mark

    问号

    Exclamation mark

    感叹号

    Dask

    破折号

    “ ” ‘ ’

    Quotation marks

    “ ” ‘ ’﹃﹄

    引号

    Hayphen

    连字线

    apostrophe

    省字符

     

    : 英语标点符号除上述十种外,还有删节号(通常为...)、括号( ( )[ ]、〈 〉、{ }等)、斜线(/\)、星号(*)、代字号(~)、脱字号()、小记号(√)、斜十字(×)、斜体字以及字下划线等。

    2. Full stop(美式英语称period)句号(.)

    (1). 句号用在一句子的末尾,表示一句话说完后的停顿。句号不但用于陈述句,亦可用于祈使句和疑问句。如:
    I really don’t know.
    我确实不知道。(陈述句) Take it or leave it. 要就要,不要就算。(祈使句)
    Will you weigh it
    please. 请你称一称它。(不需要对方回答的疑问句)
    (2).
    用于缩略语、编号的数字和字母后。如:
    kg.
    公斤  a.m.上午  No.……  n. 名词  Mr先生  1A (表示第一条,A)

    3. Full stop(美式英语称period)句号(.)

    (1). 在句子里面用于并列的词语之间。如:
    Id you keep calm, tak eyour time, concentrate and think ahead, you’ll pass your drinving test.
    假如你保持镇定、不慌不忙、集中精力注意前方,驾驶考试就能及格。

    (2). 常用于主句与状语从句或较长的词组之间。如:
    When a policyholder has a loss, he or she asks for payment from the insurance company.
    当投保人遭受损失后,他们要求保险公司支付损失。

    (3).用于在句首非限定的或无动词的短语之后。如:
    Discoved in 1789 and isolated from other elements in 1841, uranium is valued as a source of atomic enegy.
    铀于1789年被发现,1841年被从其他元素中分离出来,它被珍视为原子能的一个来源。

    (4). 用以将引导性词语或转折性词语(there fore, however, by the way, for instance, on the contrary)与句子的其余部分隔开。
    如:In the United States, for example, nodding your hand up and down means“yes”. In the same parts of Green and Turkey, hower, this motion can mean”no’
    比如在美国,点头表示可以,而在希腊和土耳其的某些地区,这一动作却表示不行

    (5).用于插入句中的从句等成分的前后。如:
    Every individual cell, whether it exists as an independent microorganism or is part of a complex creature, has its own life circle.
    每个单独的细胞,不论它是作为一个独立的微生物而存在,还是作为一个复杂生物的一部分而存在,都有自己的生命周期。

    (6). 用于非限定性定语从句或同位短语前后,进一步说明前面的名词或句子。如:
    The painter lived more than a decade in Europe, where he could be in close contact with other cubists.

    (7).有时用以分隔并列复合句(尤指较长的),用于连词(and ,as,but,for,or)之前。如:
    The fragrances of many natural substances comes from oils, and this oils may be used in manufacturing perfumes.
    许多自然物质的香味来自油类,因此,这样的油可以用来生产香水。

    (8). 用以将附加疑问句或类似词语与句中其余部分隔开。如:
    He is an excellent scholar, isn’t he?
    他是位优秀的学者,是吗?

    (9). 在直接引语中作者提示某某说之类的词语(he said, she told, etc.)用逗号与引用语分开。如:
    “This house is very big an dbeautiful”said Fritz.“
    这所房子又大又漂亮,弗里茨说。

    (10). 引语里面的引语用逗号隔开。如:
    “When the Judge said,‘Not guilty’
    I could have hugged him.”
    当法官宣布,无罪,我当时真想去拥抱他。

    (11). 用于表示日期。如:May 1, 2003 2003年五月一日

    4. Colon 冒号()

    (1). 用以表示一些或一类事物的用语之后或用于说明性的词语(as follows,in the following manner)之后,用来提起下文各项。如:
    I can’t go on my vacation this summer.The main reasons are as follows: firstly, I have no money;second, Ihave no time.
    今年夏天我不能去度假。主要原因如下:首先是没钱,其次是没时间。
    Open-pit mining follows the same sequence of oprations as underground mining: drilling, blasting, and loading and removing waste and ore.
    露天采矿遵循与地下采矿相同的作业顺序:钻孔、爆破、装载并运走废料和矿石。

    (2).(郑重文体)用于说明或解释主句的从句或词组之前。如:
    The garden had been neglected for a long time.
    那个花园长期无人照料,里面长满了杂草。

    (3).用以表示时间。如:630pm.下午六点三十分

    5. Semicolon 分号(;)

    (1).用以代替逗号,隔开句中已含逗号的部分。如:
    She wanted to be successful, whatever it might cost; to achieve her goal, whoever might sufferas a result.
    她决意求成,不惜一切代价;为达到目的,不管谁遭殃。

    (2).(郑重用法)用以隔开并列从句,尤用于无连词的句中。如:
    He couldn’t have gone home this weekend’ I saw him at the ball game on Saturday and in the ibrary on Sunday.
    他这个周末不可能回家;我在周六的球赛中看到了他,而且周日在图书馆也看见了他。
    The perfectionist is exacting for the sake of exacting; his approach has little to do with the requirements of a situation.
    十全十美主义者为苛求而苛求;其方法几乎与形势的需要毫无相干。

    6. Question mark 问号( ?)

    (1). 用于直接问句末尾。如:
    where do you live?
    你住在什么地方?
    May I have a look at your photo?
    我可以看你的照片吗?

    (2).用于括号内表示存疑。如:
    Louis
    1287-1347)路易四世 1287-1347

    7.Exclamation mark(美式英语亦称作 Exclamation point)感叹(!)

    (1). 用于表示大怒、惊讶、欣喜或其他强烈感情,置于句子或话语的末尾。如:
    What a fine day!
    选多好的天气啊!

    (2).在不规范的用法中,有时用不止一个感叹号或一个感号加一个问号。如:
    “Your wife’s just given birth to triplets.”“Triplets!?”
    你妻子刚生了三胞胎。”“三胞胎!?

    8.Dash 破折号(

    (1).(通俗用法)用以代替冒号或分号,表示对前面的话的解释、总结或结论。如:
    He is modest, considerate, warm-hearted—he is a good man.
    他谦逊、体谅别人、热心肠——是一个不错的人。

    (2).(通俗用法)单个使用或成对使用,以隔开插入句中的附加信息、补充说明或评语。如:
    The materials used—copper, stainless steel, concrete and glass—give the building a striking beauty.
    这些建筑物所使用的材料——铜、不锈钢、混凝土和玻璃——使这些建筑物更具非凡的魅力。

    9.Quotation marks (英式英语亦称作 Inverted commas)引号(‘ ’ “ ”

    在英式英语中,引号通常用单引号:‘Help!’。在美式英语中通常用双引号:“Help
    (1).
    用以表明直接引语中的所有词语和标点符号。如:
    “What kind of computer did you buy?” she asked
    你买了一种什么样的计算机?她问道。

    (2).用以引起对文中某特殊词语的注意(如术语或俚语或为某种效果而使用的词语)。如:
    The“Little Ice Age”was a period of unsettled weather that lasted from the mid-sixteenth to the early eighteenth century.
    小冰川期是从16世纪中叶到18世纪早期气候变化无常的一个时期。

    (3).用以表明文章、短诗歌、广播及电视节目等的名称。如:
    I was watching “Soccer Night”
    .我正在看足球之夜

    (4).用以表明短小的引语或谚语。如:
    Do you know the origion of the saying “the love of money is the root of all evil”
    你是否知道爱财是万恶之源这句谚语的出处。

    10. Hyphen 连接号()

    (1).用于复合名词:
    有时用以将两个词组成复合词。如:
    well-informed
    有见识的;消息灵通的  good-looking好看的  first-rate第一流的
    用以将前缀和专有名词组成复合词。如:
    pro-America
    亲美  anti-Semitism反犹太主义
    用以将两个词及夹在中间的介词组成复合词。如:
    editor-in-chief
    总编辑  father-in-law岳父 comrade-in-arms战友

    (2).(尤用于英式英语)有时以隔开某些带前缀的词,这些前缀的尾字母与后面连接词的首字母为同一元音。如:
    co-operation
    共同合作  re-elect重选  pre-eminent卓越的,优秀的

    (3).用于在一行位置的词的前半部之后。如:
    They man who makes no mistakes does not usually make any-thing.
    不犯错误的人往往也就是无所作为的人。

    (4).用于两个数字或日期之间,意为包括其中的所有数字或日期。如:
    pp
    208-345208-345 Queen Elizabeth I15581603)伊丽莎白女王一世(15581603

    11. Apostrophe 撇号,省略号,名词所有格符号(

    (1). s连用表示所有格。如:
    the cat’s tail
    猫的尾巴(单数名词) the princess’s smile 公主的微笑(以s结尾的单数名词)
    Dickens’novels OR Dickens’novel
    狄更斯的小说 (以s结尾的专有名词)
    all the students’books
    所有学生的书(s结尾的复数名词)
    the women’s cosmatics
    女人的化妆品(不规则的复数名词)

    (2). 用于缩写式,表示省略了字母或数字。如:
    I’m (
    I am) today’d (they had/would)  the spring of‘98 (1998)
    (3).
    有时与s连用构成字母、数字或缩略语的复数形式。在现代用法中,在一数字或大写字母后,此号常被省去。如:
    during the 1990’s
    during the 1990s)在二十世纪九十年代

    展开全文
  • [转]标点符号规范

    2019-06-02 11:38:00
    首先大家要明确的一点是,除了换行的特殊情况以外,所有的标点符号都必须单独占格,而不能拿一标点与一字共占一方格。 标点符号分为点号和标号两大类。我们列举些作文中常用的。 点号包括逗号、顿号、分号、冒号、...

    出处:http://www.sohu.com/a/209317931_100022361

     

    首先大家要明确的一点是,除了换行的特殊情况以外,所有的标点符号都必须单独占格,而不能拿一标点与一字共占一方格。

    标点符号分为点号和标号两大类。我们列举些作文中常用的。

    点号包括逗号、顿号、分号、冒号、句号、问号、叹号。

     

     

    标号包括引号、括号、破折号、省略号、间隔号、书名号等。

     

     

    如果要求更严格一点,标点符号在一个格子里面的位置也是有要求的。像点号都是在格子的左侧,引号、括号、书名号则是紧挨所标内容的那一侧,破折号、省略号、间隔号在格子的中间位置。另外要注意一点,破折号中间不要断开。

    以上是一般情况下标点符号的位置。

    如果几个标点符号连在一起,该怎么占格?

    当逗号与前双引号、冒号与前双引号同时出现时,需要共占一格。而句末的句号、问号、叹号与后双引号同时出现时,也是共占一格。

     

     

    当破折号、省略号、书名号与双引号同时出现时,则需要单独占格。

     

     

     

     

    换行怎么办?

    除了几个标点符号同时出现的情况,我们还会遇到换行的问题。这时候标点符号该怎么占格?

    点号的功能是表示语气和停顿,必须紧接在原语句后面,如已写到一行的最后一格,应把标点贴着格的框线挤着写下去,而不能写在下一行的开头。

     

     

    破折号和省略号可以放在一行开头,但不可分开写在一行末尾和下一行开头两处。如果一行的最后只剩一格,应挤着。

     

     

     

    引号、括号、书名号的前半部分可以放在一行开头,但不能放在上一行的末尾;它们的后半部分可以放在一行末尾,但不能放在下一行开头。

     

     

     

    另外,字母和数字一般需要居中

     

     

     

     

     

    转载于:https://www.cnblogs.com/morehappystudy/p/10962388.html

    展开全文
  • Java Character 实现Unicode字符集介绍 CJK中文字符和中文标点等判断。此外,该类提供了用于确定字符的分类的几种方法(小写字母,数字,等)和由大写转换为小写字符,反之亦然。 Unicode中文范围参考文章:...

           开发中需要判断某个字符或者字符串是中文还是英文,从而做相应的处理,大多数会用到正则来判断的,其实也可以使用 Java 来判断。Java Character 实现Unicode字符集介绍  CJK中文字符和中文标点等判断。此外,该类提供了用于确定字符的分类的几种方法(小写字母,数字,等)和由大写转换为小写字符,反之亦然。

        Unicode中文范围参考文章:http://www.iteye.com/topic/558050

    汉字:[0x4e00,0x9fa5](或十进制[19968,40869])

    数字:[0x30,0x39](或十进制[48, 57])

    小写字母:[0x61,0x7a](或十进制[97, 122])

    大写字母:[0x41,0x5a](或十进制[65, 90])

    在Java中,主要使用 Character类处理字符有关功能,Character 类中有3个静态内部类:

    UnicodeBlock 与 UnicodeScript 关系:

    1、UnicodeScript实现是在Java 7中新引入,UnicodeScript 是从语言书写规则层次对Unicode字符的分类,

    2.、在一个UnicodeScript中的字符可能分散在多个UnicodeBlock中;

    3.、一个UnicodeBlock中的字符可能会被划进多个UnicodeScript中。

    中文的标点符号主要存在于以下5个UnicodeBlock中:

    U2000-General Punctuation (百分号,千分号,单引号,双引号等)

    U3000-CJK Symbols and Punctuation ( 顿号,句号,书名号,〸,〹,〺 等;PS: 后面三个字符你知道什么意思吗? : )    )

    UFF00-Halfwidth and Fullwidth Forms ( 大于,小于,等于,括号,感叹号,加,减,冒号,分号等等)

    UFE30-CJK Compatibility Forms  (主要是给竖写方式使用的括号,以及间断线﹉,波浪线﹌等)

    UFE10-Vertical Forms (主要是一些竖着写的标点符号,    等等)

     

    编写的工具类和测试代码如下:

    import java.util.regex.Pattern;
    
    /**
     * @Description: 判断中文(汉字和标点符号)与英文工具类
     * @Auther: leijq
     * @Date: 2020-04-24 15:43
     * @Version: V1.0
     */
    public class ChineseAndEnglishUtils {
        private ChineseAndEnglishUtils() {
        }
    
        /**
         * 使用UnicodeBlock方法判断是否存在中文(包括汉字, 标点符号判断)
         *
         * @param str
         * @return true-存在,false-不存在
         */
        public static boolean checkChinesePunctuationByScript(String str) {
            if (str == null) {
                return false;
            }
            char[] chars = str.toCharArray();
            for (char aChar : chars) {
                if (isChineseByScript(aChar)) {
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 使用UnicodeScript方法判断是否存在中文(包括汉字, 标点符号判断)
         *
         * @param str
         * @return true-存在,false-不存在
         */
        public static boolean checkChinesePunctuationByBlock(String str) {
            if (str == null) {
                return false;
            }
            char[] chars = str.toCharArray();
            for (char aChar : chars) {
                if (isChineseByBlock(aChar)) {
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 使用Unicode编码范围来判断是否存在汉字, 标点符号不做判断
         *
         * @param str
         * @return true-存在,false-不存在
         */
        public static boolean checkChineseByUnicodeRange(String str) {
            if (str == null) {
                return false;
            }
            String regEx = "[\\u4e00-\\u9fa5]+";
            Pattern pattern = Pattern.compile(regEx);
            return pattern.matcher(str.trim()).find();
        }
    
        /**
         * 使用UnicodeBlock方法判断是否存在汉字, 标点符号不做判断
         *
         * @param c
         * @return true-存在,false-不存在
         */
        public static boolean isChineseByBlock(char c) {
            Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
            if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C
                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D
                    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT) {
                return true;
            } else {
                return false;
            }
        }
    
        /**
         * 使用UnicodeScript方法判断是否存在汉字, 标点符号不做判断
         *
         * @param c
         * @return true-存在,false-不存在
         */
        public static boolean isChineseByScript(char c) {
            Character.UnicodeScript sc = Character.UnicodeScript.of(c);
            if (sc == Character.UnicodeScript.HAN) {
                return true;
            }
            return false;
        }
    
        /**
         * 根据UnicodeBlock方法判断中文标点符号
         *
         * @param c
         * @return true-存在,false-不存在
         */
        public static boolean isChinesePunctuation(char c) {
            Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
            if (ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
                    || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
                    || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS
                    || ub == Character.UnicodeBlock.VERTICAL_FORMS) {
                return true;
            } else {
                return false;
            }
        }
    
    
        public static void main(String[] args) {
            System.out.println("=====使用Unicode编码范围来判断是否存在汉字, 标点符号不做判断======");
            System.out.println("abc中国,.d==" + checkChineseByUnicodeRange("abc中国,.d"));
            System.out.println("abc中d==" + checkChineseByUnicodeRange("abc中d"));
            System.out.println("abc,.d==" + checkChineseByUnicodeRange("abc,.d"));
    
            System.out.println("=====使用UnicodeBlock方法判断是否存在中文(包括汉字, 标点符号判断)=====");
            System.out.println("abc中国,.d==" + checkChinesePunctuationByBlock("abc中国,.d"));
            System.out.println("abc中d==" + checkChinesePunctuationByBlock("abc中d"));
            System.out.println("abc,.d==" + checkChinesePunctuationByBlock("abc,.d"));
    
            System.out.println("=====使用UnicodeScript方法判断是否存在中文(包括汉字, 标点符号判断)=====");
            System.out.println("abc中国,.d==" + checkChinesePunctuationByScript("abc中国,.d"));
            System.out.println("abc中d==" + checkChinesePunctuationByScript("abc中d"));
            System.out.println("abc,.d==" + checkChinesePunctuationByScript("abc,.d"));
    
            System.out.println("=====根据UnicodeBlock方法判断中文标点符号=====");
            System.out.println(".==" + isChinesePunctuation('.'));
            System.out.println("。==" + isChinesePunctuation('。'));
        }
    
    }
    

         

    ends~

    展开全文
  • erLang中的标点符号

    千次阅读 2014-10-16 10:03:14
    ErLang中的标点符号  ErLang语法中充满了一些约定。大写字母开头的名字(比如Address),表示一个变量,包括参数、局部变量等;小写字母开头的单词(比如ok),表示一个常量,叫做atom(原子的意思),包括常量名...
    ErLang中的标点符号 
    ErLang语法中充满了一些约定。大写字母开头的名字(比如Address),表示一个变量,包括参数、局部变量等;小写字母开头的单词(比如ok),表示一个常量,叫做atom(原子的意思),包括常量名、函数名、模块名等。 
    ErLang的注释用%开头。ErLang用下划线“_”表示任意变量,类似于Java的switch语法里面的default选项。 
    ErLang脱胎于Prolog,不过,我觉得,ErLang语法和Haskell语法比较象,都是采用 -> 定义函数。 
    ErLang语句中的标点符号用法很象文章的标点符号。 
    整个函数定义结束用一个句号“.”;同一个函数中,并列的逻辑分支之间,用分号“;”分界;顺序语句之间,用逗号“,”分隔。 
    ErLang中,{ }不是表示程序块的开头和结尾,而是表示一种特殊的数据结构类型——Tuple(元组),比如,{12, 3, ok}。我们可以把Tuple理解为定长数组。 
    [ ] 则表示最基本的函数式编程的数据结构类型——List。List数据结构很基本,写法和用法也有一定的复杂度,不是表面上看起来那么简单,后面讲解Closure的章节会详细介绍List的最基本的构造原理。 
    下面我们来看一个简单的例子。 
    我们首先定义一个最简单的函数,把一个参数乘以10,然后加1。 
    times10( Number ) –> 
    Temp = 10 * Number, 
    Temp + 1. 

    为了说明问题,上面的代码把乘法操作和加法操作分成两个步骤。Temp = 10 * Number语句后面是逗号,因为这是两条顺序执行的语句。 Temp + 1语句后面是句号,表示整个函数定义结束。而且,可以看出,ErLang没有return语句,最后执行的那条语句的执行结果就是返回 值。 
    下面,我们把这个函数优化一下。当参数等于0的时候,直接返1;否则,就乘以10,然后加1,然后返回。这时候,我们就要用到case of逻辑分支语句,相当于java的switch语句。 
    times10( Number ) –> 
    case Number of 
    0 -> 1; 
    _ -> 
    Temp = 10 * Number, 
    Temp + 1 
    end. 

    我们来仔细观察这段ErLang程序。 
    当Number等于0的时候,直接返回1。由于这是一条分支语句,和后面的分支是并列的关系,所以,1的后面的标点符号是分号。后面这个分支,下划线“_”表示任何其它值,这里就表示除了1之外的任何其它数值。 
    需要注意的一点是,case of语句需要用end结尾,end之前不需要有标点符号。 
    上述代码中的case of 语句,其实就是Pattern Match的一种。ErLang的Pattern Match很强大,能够大幅度简化程序逻辑,后面进行专门介绍。 
    Pattern Match 
    Pattern Match主要有两个功能——比较分派和变量赋值。 
    其中,比较分派是最主要的功能。比较分派的意思是,根据参数值进行条件分支的分派。可以把比较分派功能看作是一种类似于if, else等条件分支语句的简洁强大写法。 
    上面的例子中,case Number of 就是根据Number的值进行比较分派。更常见的写法是,可以把Pattern Match部分提到函数定义分支的高度。于是,上述代码可以写成下面的形式: 
    times10( 0 ) –> 1; 
    times10( Number ) –> 
    Temp = 10 * Number, 
    Temp + 1. 

    这段代码由两个函数定义分支构成,由于两个函数分支的函数名相同,而且参数个数相同,而且两个函数定义分支之间采用分号“;”分隔,说明这是同一个函数的定义。函数式编程语言中,这种定义方式很常见,看起来形式很整齐,宛如数学公式。 
    这段代码的含义是,当参数值等于0的时候,那么,程序走第一个函数定义分支(即分号“;”结尾的“times10( 0 ) –> 1;”),否则,走下面的函数定义分支(即“times10( Number ) –>…”)。 
    第二个分支中的参数不是一个常数,而是一个变量Number,表示这个分支可以接受任何除了0之外的参数值,比如,1、2、12等等,这些值将赋给变量Number。 
    因此,这个地方也体现了Pattern Match的第二个功能——变量赋值。 

    Pattern Match的形式可以很复杂,下面举几个典型的例子。 
    (1)数据结构拆解赋值 
    前面将到了ErLang语言有一种相当于定长数组的Tuple类型,我们可以很方便地根据元素的位置进行并行赋值。比如, 
    {First, Second} = {1, 2} 
    我们还可以对复合Tuple数据结构进行赋值,比如 
    {A, {B, C}, D} = { 1, {2, 3}, 4 } 
    List数据结构的赋值也是类似。由于List的写法和用法不是那么简单,三言两语也说不清楚,还徒增困扰,这里不再赘述。 
    (2)assertEquals语句 
    在Java等语言中,我们写单元测试的时候,会写一些assert语句,验证程序运行结果。这些assert语句通常是以API的方式提供,比如,assertTrue()、assertEquals()等。 
    在ErLang中,可以用简单的语句达到类似于assertTrue()、assertEquals()等API的效果。 
    比如,ErLang中,true = testA() 这样的语句表示testA的返回结果必须是true,否则就会抛出异常。这个用法很巧妙。这里解释一下。 
    前面讲过,ErLang语法约定,小写字母开头的名字,都是常量名。这里的true自然也是一个常量,既然是常量,我们不可能对它赋值,那么true = testA()的意思就不是赋值,而是进行匹配比较。 
    (3)匹配和赋值同时进行 
    我们来看这样一段代码。 
    case Result of 
    {ok, Message} -> save(Message); 
    {error, ErrorMessage} -> log(ErrorMessage) 
    end. 

    这段代码中,Result是一个Tuple类型,包含两个元素,第一个元素表示成功(ok)或者失败(error),第二个元素表示具体的信息。 
    可以看到,这两个条件分支中,同时出现了常量和变量。第一个条件分支中的ok是常量,Message是变量;第二个条件分支中的error是常量,ErrorMessage是变量。 
    这两个条件分支都既有比较判断,也有变量赋值。首先,判断ResultTuple中的第一个元素和哪一个分支的第一个元素匹配,如果相配,那么把 ResultTuple中的第二个元素赋给这个分支的第二个变量元素。即,如果Result的第一个元素是ok,那么走第一个条件分支,并且把 Result的第二个元素赋给Message变量;如果Result的第二个元素是error,那么走第二个条件分支,并且把Result的第二个元素赋 给ErrorMessage变量。 

    在Java等语言中,实现上述的条件分支逻辑,则需要多写几条语句ErLang语法可以从形式上美化和简化逻辑分支分派复杂的程序。 
    除了支持数相等比较,Pattern Match还可以进行范围比较、大小比较等,需要用到关键字when,不过用到when的情况,就比if else简洁不了多少,这里不再赘述。 
    匿名函数 
    ErLang允许在一个函数体内部定义另一个匿名函数,这是函数式编程的最基本的功能。这样,函数式语言才可以支持Closure。我们来看一个ErLang的匿名函数的例子。 
    outer( C ) –> 
    Inner = fun(A, B) -> A + B + C end, 
    Inner(2, 3). 

    这段代码首先定义了一个命名函数outer,然后在outer函数内部定义了一个匿名函数。可以看到,这个匿名函数采用关键字fun来定义。前面讲过,函 数式编程的函数就相当于面向对象编程的类实例对象,匿名函数自然也是这样,也相当于类实例,我们可以把这个匿名函数赋给一个变量Inner,然后我们还可 以把这个变量当作函数来调用,比如,Inner(2, 3)。 
    fun是ErLang用来定义匿名函数的关键字。这个关键字很重要。fun定义匿名函数的用法不是很复杂,和命名函数定义类似。
    函数分支的定义也是类似,只是需要用end结尾,而不是用句号“.”结尾,而且fun只需要写一次,不需要向命名函数那样,每个分支都要写。比如, 
    MyFunction = fun(0) -> 0; 
    (Number) -> Number * 10 + 1 end, 
    MyFunction(3), 
    函数作为变量 
    匿名函数可以当作对象赋给变量,命名函数同样也可以赋给变量。具体用法还是需要借助重要的fun关键字。比如, 
    MyFunction = fun outer / 1 

    就可以把上述定义的outer函数赋给MyFunction变量。后面的 / 0表示这个outer函数只有一个参数。因为ErLang允许有多个同名函数的定义,只要参数个数不同,就是不同的函数。 
    我们可以看到,任何函数都可以作为变量,也可以作为参数和返回值传来传去,这些变量也可以随时作为函数进行调用,于是就具有了一定的动态性。 
    函数的动态调用 
    ErLang有一个apply函数,可以动态调用某一个函数变量。 
    基本用法是 apply( 函数变量,函数参数列表 )。比如,上面的MyFunciton函数变量,就可以这么调用,apply( MyFunction, [ 5 ])。 
    那么我们能否根据一个字符串作为函数名获取一个函数变量呢?这样我们就可以根据一个字符串来动态调用某个函数了。 
    ErLang中,做到这一点很简单。前面讲过,函数名一旦定义了,自然就固定了,这也类似于常量名,属于不可变的atom(原子)。所有的atom都可以 转换成字符串,也可以从字符串转换过来。ErLang中的字符串实质上都是List。字符串和atom之间的转换通过list_to_atom和 atom_to_list来转换。 
    于是我们可以这样获取MyFunciton:MyFunction = list_to_atom(“outer”) 
    如果outer函数已经定义,那么MyFucntion就等于outer函数,如果outer函数没有定义,那么list_to_atom(“outer”)会产生一个新的叫做outer的atom,MyFucntion就等于这个新产生的atom。 
    如果需要强制产生一个已经存在的atom,那么我们需要调用list_to_existing_atom转换函数,这个函数不会产生新的atom,而是返回一个已经存在了的atom。 
    Tuple作为数据成员集合 
    前面讲解函数式编程特性的时候,提到了函数式编程没有面向对象编程的成员变量,这是一个限制。 
    ErLang的Tuple类型可以一定程度克服这个限制。Tuple可以一定程度上担当容纳成员变量的职责。 
    面向对象的类定义,其实就是一群数据和函数的集合,只是集合的成员之间都有一个this指针相关联,可以相互找到。 
    ErLang的Tuple类型就是数据的集合,可以很自然地发挥成员变量的作用,比如,{Member1, Member2}。 
    读者可能会说,ErLang的函数也可以作为变量,也可以放到Tuple里面,比如, { Memer1, Member2, Funtion1, Function2}。这不就和面向对象编程一样了吗? 
    遗憾的是,这样做是得不偿失的。因为函数式编程没有面向对象的那种内在的this指针支持,自然也没有内在的多态和继承支持,硬把数据和函数糅合在一个Tuple里面,一点好处都没有,而且还丧失了函数作为实例对象的灵活性。 
    所以,函数式编程的最佳实践(Best Practice)应该是:Tuple用来容纳成员数据,函数操作Tuple。Tuple定义和函数定义加在一 起,就构成了松散的数据结构,功能上类似于面向对象的类定义。Tuple + 函数的数据结构,具有多态的特性,因为函数本身能够作为变量替换;但是不具 有继承的特性,因为没有this指针的内在支持。 
    正是因为Tuple在数据类型构造方面的重大作用,所以,ErLang专门引入了一种叫做Record的宏定义,可以对Tuple的数组下标位置命名。比 如,把第一个元素叫做Address,第二个元素叫做Zipcode,这样程序员就可以这些名字访问Tuple里面的元素,而不需要按照数组下标位置来访 问。 
    Tuple和Record的具体用法还是有一定复杂度,限于篇幅,本章没有展开说明,只提了一些原理方面的要点。 
    其它 
    ErLang还有其它语法特性和细节,不再一一赘述。有兴趣的读者,可以自行去ErLang网站(www.erlang.org)进行研究。
    展开全文
  • Java Character 实现Unicode字符集介绍 CJK中文字符和中文标点判断 主要内容: 1. Java Character类...做中文信息处理,经常会遇到如何判断一个字是否是中文,或者是否是中文的标点符号等。 在Java中,主要使...
  • 1、刚开始用正则,想把标点符号提取...)等包括数字,字母,标点符号char.IsPunctuation(”?“)等 有问题,判断不准 3、单位前辈说,所有中文字符ASCII码值都小于零,用这个判断就是了(不过还是出问题了,似...
  • JavaScript (js)— 正则匹配中文标点符号 function checkText() { var text = ","; //匹配这些中文标点符号 。 ? ! , 、 ; : “ ” ‘ ' ( ) 《 》 〈 〉 【 】 『 』 「 」 ﹃ ﹄ 〔 〕 … — ~ ﹏ ¥ ...
  • 很多seo小伙伴一直问汉文SEO大神,网站标题到底用什么符号好呢?遇到选择困难症的小伙伴,可能搞了半天也不知道选哪个。标题上面的符号对于网站排名来说作用不是很大,但是给人的体验不一样,给搜索引擎反馈的含义也...
  • 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 ...
  • 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。 示例 1: 输入: "the sky is blue" 输出:"blue is sky the" 示例 2: 输入: " hello world! " 输出:...
  • C语言拾遗-符号

    2020-06-29 22:18:06
    C语言符号集包括:英文字母、数字和一些有特定含义的标点符号。任何C程序都是由C的符号集里的符号构成具有一定含义的语句,再由这些语句组成程序。
  • Latex相关符号

    千次阅读 2017-03-23 22:30:11
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} latex数学符号表(2)" style="border:none; max-width:100%"> \acute{\eta} latex数学符号表(2)" style="border:none; max...
  • LaTeX 各种命令,符号

    万次阅读 多人点赞 2016-06-12 15:27:42
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} latex数学符号表(2)" style="border:none; max-width:100%"> \acute{\eta} latex数学符号表(2)" style="border:none; max...
  • 函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \t...
  • Latex各种命令、符号、公式、数学符号、排版等

    万次阅读 多人点赞 2017-12-01 10:56:03
    本文仅供学习参考使用,一切版权和解释权均归原作者所有,转载地址:...数学符号详细内容见:http://mohu.org/info/symbols/symbols.htm 直接查看链接  http://www.mo
  • Latex命令符号

    千次阅读 2018-12-09 19:57:19
    本文章仅方便学习使用,一切版权和解释权归原作者所有,转载地址: ... ...函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} ...
  • LateX各种命令符号

    千次阅读 2018-11-25 19:55:01
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \...
  • Python正则化去除字符串标点

    千次阅读 2018-12-28 07:09:20
    Python正则化去除字符串标点使用re.compile使用re.sub替换使用自带匹配规则参考文档 Python正则化主要依靠的是re这个包,re代表 Regular Expression。是在做leetcode 819. Most Common Word的时候遇到需要处理标点的...
  • 正则表达式符号字符大全

    千次阅读 2017-01-11 00:17:11
    正则表达式符号 正则表达式[1] 由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。 在最简单的情况下,一个正则表达式看上去...
  • Bert模型相关(增加至6个标点

    千次阅读 2020-06-30 23:04:10
    在以前工作的基础上,为了提高模型的普适性,又将模型的三种标点增加到六种标点包括:逗号、句号、问号、冒号、感叹号、顿号。 将数据集处理为txt时,对应关系如下: 处理后的数据集如下: 句子之间以空格分离 ...
  • python编程符号大全-python符号大全

    千次阅读 2020-10-30 00:30:22
    标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。 反斜杠本身需要使用反斜杠转义。 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串... 我不明白python为什么没有sign功能?... python进阶-...
  • LaTex符号应用

    万次阅读 2018-07-13 19:03:57
    原文链接:http://blog.csdn.net/anxiaoxi45/article/details/39449445函数、符号及特殊字符声调语法效果语法效果语法效果\bar{x}\acute{\eta}\check{\alpha}\grave{\eta}\breve{a}\ddot{y}\dot{x}\hat{\alpha}\...
  • //取出3后面的10条记录,不包括3 select*from 表名 order by rand() limit 2;// 从表中随机取出2 条记录,这里2 可以自己改 [ Mysql查询数据库表中前几条记录 ] 10、 往表中插入新的字段 : mysql> alter ...
  • 原文链接:...表情符号直接传给后台的话回报乱码,这时候就需要前端把内容编码一下传给后台, try {     String enUft = URLEncoder.encode("广东省福利彩票开奖信息网", "UTF-8
  • Latex各种命令、符号、公式、数学符号、排版等 本文仅供学习参考使用,一切版权和解释权均归原作者所有,转载地址:   数学符号详细内容见:http://mohu.org/info/symbols/symbols.htm 直接查看链接  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,483
精华内容 10,593
关键字:

包括后面的标点符号