mathacker

no math, little hacker


  • Home

  • Categories

  • About

  • Archives

  • Tags

beautiful-racket-part-1

Posted on 2020-10-03 | In FP, Racket

Foreword by Matthew Flatt

让我们回顾1993年时的事情:

  • 为 GC 是否可作为手动内存管理的替代项而争论过(当时还没有 Java)
  • 为一等函数和闭包是否能被平均水平的程序员掌握而讨论过(当时还没有 JavaScript)
  • 我们终于确认了,静态类型系统辅以良好的保证确实物有所值(此时大部分程序员没有听说过 Haskell 和 ML,在 Java 引入泛型的几年之前)

此类技术,眼下已经属于理所应当,而彼时却会引发争论。当然,这些变化不是在一夜之间发生的。部分原因是,硬件性能和软件的scale的变化,改变了编程语言的可能性与tradeoff。部分原因是,越来越多的人尝试不同技术,然后不愿再回去了。

本书的核心是语言的可扩展性,对 Racket 来说是其中的 Macro。那么,如果宏真地这么好,为什么不是每个人都已在使用?如同 GC,宏看起来很酷,但也引入了太多 overhead(不是程序执行上,而是程序理解上)。类似于一等函数,宏在代码中引入了另一维度。

PS:应该不类似于与 GC,因为GC实际上是大大减轻了程序员的心智负担。

Make a language in one hour: stacker

Why Make Languages

What is a programming language?

不管是编写一般的程序,还是特殊的 compiler 与 interpreter,它们都遵循一个统一的模式:

  • take some input -> put it into a processing device -> get a result

中间的部分 device 可大可小,可以说一个函数、程序,也可以是一种编程语言。以如此抽象的视角去看待,那么编程语言可以视为特殊的函数,一个函数可以视为一种 DSL(在一个极小的领域内)。

How are languages implemented in Racket?

分为三步:

  • 设计语言的 notation 和 behavior
  • 编写一个 Racket 程序来读入源代码,将其 notation 和 behavior 转换为相应的 Racket 程序
  • 执行转换后的 Racket 程序

第三步整个地由 Racket toolchain 完成,因此只需要关注前两部。

The Components of a Language

  • reader:将源代码从字符串转换为 Racket 的 S 表达式。
  • expander:确定这些表达式如何对应到可执行的 Racket 表达式(从而可进一步产生结果)

reader 负责将程序转换为正确的形式;expander 负责给这些形式赋予意义。

奇妙的是,我们甚至可以先将 reader 设计为生成不存在的函数,之后再在 expander 中实现。

The Reader

1
2
3
4
5
6
7
8
9
; stacker.rkt
#lang br/quicklang

(define (read-syntax path port)
(define src-lines (port->lines port))
(datum->syntax #f '(module lucy br
"Hello World")))

(provide read-syntax)

每个 reader 都需要提供一个 read-syntax 函数,Racket 给 reader 传入两个参数:path 与 port。

每一个 read-syntax 都需要做一件事情:返回代码,该代码描述了一个称为 syntax object 的模块。Racket 将源代码替换为此模块。新模块将调用 expander,从而将模块完全扩展。此后,模块将被 Racket 解释器正常求值。

reader 示例解释

read-syntax 函数做两件事情,一是从 port 中读取源代码,二是将结果转为上述的模块(模块也是表达式)。模块的模式是:

1
2
3
4
5
6
; 此表达式包含需要 expand 和 evaluate 的表达式
(module module-name which-expander
42
"foobar"
(+ 1 1)
...)

示例中,先将代码表示为 data(quote),在用 datum-syntax 将其转换为 syntax object。

测试

现在可以测试所编写的 reader 代码。

1
2
3
4
5
; stacker-test.rkt
#lang reader "stacker.rkt"

foo
bar

在执行时,这段代码将会被完全替换为 reader 返回的结果,因此打印出:Hello World。

一般地,每一个以 #lang 开头的文件都会被如此转换为另一个模块。

改进

上面的Hello World什么也不错,实际上是完全忽略了输入,下面来让它做点事情。

1
2
3
4
5
6
7
8
9
10
#lang br/quicklang

(define (read-syntax path port)
(define src-lines (port->lines port))
(define src-datums (format-datums '(handle ~a) src-lines))
(define module-datum `(module stacker-mod "stacker.rkt"
,@src-datums))
(datum->syntax #f module-datum))

(provide read-syntax)
  • format-datums 接受字符串列表,对每个元素进行格式化。
  • 先是表示 quasiquote ,,@ 则读取列表

用如下代码测试:

1
2
3
4
5
6
#lang reader "stacker.rkt"
4
8
+
3
*

转换的模块内容是:

1
2
3
4
5
6
'(handle)
'(handle 4)
'(handle 8)
'(handle +)
'(handle 3)
'(handle *)

francais-avec-duolingo

Posted on 2020-09-01 | In French

使用 Duolingo 学习法语的笔记。

Checkpoint 1

第一个 cp 之前的内容

Basics

Bienvenue (Welcome)

令人吃惊的是,法语是世界上29个国家的官方语言,法国法语和魁北克法语是两大主要分支。

法语衍生于拉丁语,属于印欧语系罗曼语族的高卢-罗曼语支。

字母

字母表由拉丁字母组成:

  • 元音:a e i o u y
  • 辅音字母:b c d f g h j k l m n p q r s t v w x z
  • 连字:Œ(œil、fœtus、bœuf…)

性

所有名词都要么属于阳性(masculine),要么属于阴性(feminine),即使一个名词并非指人或其它动物。表示“一个”时,阳性用 un,阴性用 une。

人称

  • I am: je suis
  • you are: tu es
  • he/she is: il/elle est

Verbs

英语中的动词变化不多,如 run/run/runs,但法语中的动词变化甚多。

  • I speak: je parle
  • you speak: tu parles
  • he/she speaks: il/elle parle

这里,parles 的 s 不发音,因此三种形式读音一致。

性

上节提到的是性与冠词的关系,除此之外,形容词使用时也需要考虑性。一般来说,修饰阴性词的形容词结尾处添加一个 e:

  • Gabriel est espagnol
  • Sarah est espagnole

有时候,结尾的 e 会导致发音的些微变化。

鼻音

法语中有些发音属于鼻音(nasal),气流从鼻中经过。此时,元音字母之后的 n 不发音,它只是提醒你,use your nose。如,

  • an
  • in
  • on

Greetings

Hello there

与英语类似,法语中的部分问候语与一天的时间有关。

  • Bonjour: Good morning/afternoon
  • Bonsoir: Good evening

在非正式的情况下,全天候可使用 Salut 。

How are you?

Ça va 可问候对方,亦可回答对方的问候。

  • Salut, ça va ?
  • Ça va, et toi ?

重音符号

如 è, é。

如果一个词结尾处是 e,它通常是不发音的,如 homme。

People

法语中的读音

注意法语读音与英语的不同。

  • chat: bush
  • ça: salad
  • heure: hour
  • je: measure

通常词的结尾字母是不发音的,尤其是 s 和 t,如 suis 和 chat。

J’habite à Paris

法语有两个词有 in 的意思。表达城市时用 à,而表达国家时用 en。

拼写

很多法语读音对应于不同的拼写形式。

  • o: gros, Paul, beaucoup
  • é: trés, anglais
  • in: vin, américain

Plural

一般是在结尾添加 s,但此时通常是不发音的。

  • un chat -> deux chats
  • la fille -> les filles

Take that!

动词 prendre 有 take 的含义,随人称形式发生变化:

  • je prends
  • tu prends
  • il/elle prend

他们与她们

ils 与 ells 和汉语中的他们与她们相近。

发音

结尾处的辅音(consonant)不发音,例外情况是,在其之后的是元音字母或不发音的 h:

  • les hotels

Travel

The, the, or the?

Le 用于阳性词,La 用于阴性词,如果所修饰的词以元音开始,则使用 L':

  • l’homme

Tu as un passeport?

大部分动词的变化是很有规律的,但有些不是:

  • I go: je vais
  • you go: tu vas
  • he/she goes: el/elle va

如果动词以元音开始,则使用 j' 。

Oh, gee!

g 后面的字母不同时,其发音有所不同:

  • gants: gap
  • mange: measure
  • compagne: onion

Family

Ma famille

在英语中,我们说 my mother 和 my father,在法语中则是 mon père 和 ma mère。诸如 my 和 your 这样的代词须依照其后的词的性做出相应变化。

  • my father: mon père
  • my mother: ma mère
  • your brother: ton frère
  • your sister: ta sœur
  • his/her son: son fils
  • his/her daughter: sa fille

Fille 可表示 girl 或 daughter,Femme 可表示 woman 或 wife,具体含义须依据语境获得。

Whose kid is this?

在英语中,我们说 Marie's cat,在法语中则是 le chat de Marie(相当于 the cat of Marie)。

如果 de 之后的词以元音开始,则使用 d' ,如 le chien d'Anna。

Adjectives

形容词与名词的连带变化见附录。

Pronouns

代词与名词的连带变化见附录。

Introductions

介绍人时,c'est 用于单数,ce sont 用于复数。

Activities

Using nous

在法语中,动词随行为的施行者改变形式,对于 nous,多数动词以 -ons 结尾。

  • we want: nous voulons
  • we have: nous avons
  • we live: nous habitons

Verbs

部分动词的变化是不规则的:

  • I want: je veux
  • you want: tu veux
  • he/she wants: il/elle veut
  • nous want: nous voulons

Au wow!

在法语中,à 从不会与 le 共同使用,此时应该使用 au(in/at/to the)。

  • Tu vas au restaurant.
  • Elle va au zoo.

Restaurant

Tu prends un thé?

Prendre 有 take/have 的意思。

  • Tu prends un thé?

Je voudrais un verre d’eax!

如果一个名字起始字母是元音,那么使用 d' 而非 de,这样读起来更为顺畅。

餐馆中的预订

  • Une table pour deux personnes, s’il vous plait.

使用 voudrais 而非 veux 表示 would like。

City

Un vélo vert!

在法语中,形容词通常位于所修饰的名词之后。因此 a green bike 表示为 un vélo vert。

  • une université française(French)

Where is …?

使用 Qù est...?

  • Où est l’école?
  • Où sont les toilettes?

Travel 2

J’aime voyager!

Voyager,aller,manger 都是不及物动词,英语中,不及物动词通常在前面加 to,但法语中不需要。

J’aime la France!

在英语中,定冠词 the 通常用于指定特定的事物。在法语中,le/la/les 除了可以指定特定的事物,也可以用于一般事实,此外也用于表示喜欢/不喜欢的事物,以及国家。

PS: 因此经常会发现有些定冠词出现在某些令人意外的位置。

  • Les trains sont grands -> Trains are big
  • Tu aimes le vin?
  • Le Mexique est mon pays.

Aux my goodness!

  • à + le -> au: Tu vas au supermarché?
  • à + les -> aux: Je vais aux Etats-Unis.

Ils aiment voyager?

当动词主语涉及多于一个人时,多数动词的形式是以 -nt 结尾。

At home

Il y a …

此短语可用于表示 there is 和 there are。

  • Il y a une fleur blanche.

That’s some word

当谈及多于一个的事物时,un 和 une 改为 des。在英语中可以说 cats,但法语中必须用 des cats。

At work

Where are you?

前面已看到可用 à、au、aux 表示 in的意思,它们还可以表示 at。

  • Je suis au travail.

Tu écris une lettre?

écrire 在有的变位形式中添加 v。

  • ils/elles écrivent

Food

Mealtime

在法国,很多家庭会坐下来同吃晚饭(dîner),聊聊当天的生活。

  • petit-déjeuner
  • déjeuner
  • dîner

Verbs

以 -er 结尾的动词,像是 aimer 和 manger,通常遵循相同的变位模式。

  • je prépare
  • tu prépares
  • nous: préparons
  • ils/elles: préparent

What’s this?

ce 作为代词,也因名词的性而发生变化。

  • ce/cette
  • ces/ces

Habits

It’s the afternoon

在法语中,谈论一天中的时间以及三餐时,确保使用 le/la/l'。

  • C’est l’aprés-midi
  • aprés le dessert

Shopping

Gender

部分形容词对阴性名称使用特殊的形式。

  • blanc: blanche
  • cher: chére
  • bon: bonne
  • gentil: gentille

缩约形式

类似于 à + le = au,有 de + le = du。

People 3

Tu viens d’Italie?

英语中,我们说 Hi is from Mexico,在法语中则使用 Il vient Mexique,字面意思是 He comes from the United States。

venir 变位:

  • je viens
  • tu viens
  • il/elle vient
  • nous venons
  • ils/ells viennent

Tu n’es pas fran

记住,这看起来像是一个 sandwich。如果动词以元音字母起始,那么 ne 变为 n'。

  • Je ne suis pas italien.
  • Tu n’es pas canadien.

非正式对话中,人们有时会省略掉 ne。

  • Il est pas jeune.

City 2

形容词

前面已经看到,形容词因所修饰名词的性与数而变化。下面几个形容词的结尾是 -eux,它们的变化也遵循一定的模式:

  • un pont dangereux/une rue dangereuse
  • des ponts dangereux/des rues dangereuses

Verbs

大多数以 -er 结尾的动词遵循类似的变化模式,要多加练习。

  • je parle/j’écoute
  • tu parles/tu écoutes
  • il/elle parle/il/elle écoute
  • nous parlons/nous écoutons
  • ils/elles parlent/ils/elles écoutent

Friends

tu 表示”你”是一个人,当多人时,使用 vous,此时动词应以 -ez 结尾。

  • vous mangez

Mon amie

我们已经知道,当名词为阴性时,使用 ma,ta 和 sa,但如果名词以元音起始,则仍使用 mon,ton,son。

Notre and votre

表示所有格时,对应于第一人称和第二人称的是 notre/nos 与 votre/vos 。

People 4

Speak you French?

疑问句的一种构造方式是将动词提前,并添加一个连字符。

  • Tu parles chinois -> Parles-tu chinois?
  • Etes-vous professeur?

Interrogations

如果对问题的答案期望的不止是简单的 oui 或 non,此时需要一个特定的疑问词(类似于英语中的What、How等)。

  • Où est-elle?
  • Quand travailles-tu?

How often?

法语中表示频率的词/短语通常置于句子的开头,或紧跟在动词之后。

  • Chaque vendredi, nous mangeous au restaurant.
  • Je vais souvent au musée.

At Home 2

Chez moi!

在英语中可能会说 I'm at Ann's place,在法语中则通常使用 chez + 人名 的方式,也可使用 chez + 代词 的形式。

  • Je suis chez Pierre. (I am at Pierre’s place)
  • Nous sommes chez Alice et Paul.
  • chez moi/toi (at my/your place)

What time is it?

要表达时间,句子开头使用 Il est。

  • Il est trois heures et quart. (It’s a quarter past three).

英语中有时可忽略 o'clock,但法语中不能省略 heures。

Trois heures du matin?

24小时制在法语中颇为常见,如 4h00、16h00,但12小时制也是可用的。

  • Le train part à cinq heures du matin.
  • Ils mangent à deux heures de l’après-midi.

Travel 3

Good day, sir.

有两种方式说“你”。在友好的交谈状态或对着孩子时,使用 tu;我们已经知道使用 vous 表示多于一个人,但它也可以用在较为正式的、与不认识的成年人交谈时。

  • Tu aimes le vin? (Do you like wine?)
  • Madame, voyagez-vous avec votre fille?

S’il te plait vs. s’il vous plait

vous 的版本更为正式,两者的字面意思都是 if it pleases you。

Activities 2

No more silence

很多位于单词结尾处的辅音不发音,但如果它后面的单词开头字面是元音或不发音的 h,那么辅音就要发音了。

  • les: les enfants
  • grand: grand arbre

那么,例外又来了,et 的 t 是从来不会发音的。

Breakfast

Du thé ou du café?

有些名称是不可数的——我们说 I want some honey,而不是 I want one honey。在法语中,总是需要在不可数名词前使用 du/de la/des。

  • Je prends du sucre avec mon café
  • J’achète des pates

J’adore le chocolat

当我们谈论喜欢(或不喜欢/偏好)什么时,需要在名词之前加上 le/la/les。

Vacation

英语中的 a 在元音之前变为 an,法语中则是 ce 变为 cet。

What are you doing this weekend?

  • Je vais voyager.
  • Nous n’allons pas partir.

Avec moi

在介词(如 avec 和 de),使用类似于 moi/toi 这样的代词(类似于宾格)。

  • il: lui
  • ils: eux
  • Ils vont rester chez eux.

School

Je ne comprends pas!

以 -prendre 结尾的词的变位遵循相同的模式。

Do you do that in French?

英语中可以用 Do 提出一个问题,如 Do you love me?,在法语中则使用 Est-ce que...。至此,这个句型是与英语中的疑问句最相符合的。

  • Est-ce que tu veux du lait?
  • Est-ce qu’Anne comprend?

At work

J’ai besoin de café

J'ai besoin de 的字面意思是 I have the need of ...,该表达之后可以跟动词和名词。

  • Tu as besoin d’étudier.

Let me finish

很多以 -ir 结尾的动词具有相同的变位形式,以 finir 为例:

  • je/tu finis
  • il/elle finit
  • nous finissons
  • vous finissez
  • ils/ells finissent

Leur vs. leurs

leur 的意思是 their,但如果名词为复数,则需要改变为 leurs。

Hotel

Adjectives

我们已经看到形容词通常位于名词之后,但如果是谈论一下情况,则前置之:

  • Beauty (beaux)
  • Age (nouvelle)
  • Goodness (bons)
  • Size (petit/grand)

可以记为 BAGS。

Combien de?

Combien de? 用于询问 How many/much。

  • Combien de journaux voulez-vous?
  • Vous voulez rester combien de nuits?

Routine

询问 What are you doing,使用 Que fais-tu,或者更随意一点用 Tu fais quoi。

Je me réveille toujours tard?

介绍自己名字时说 Je m'appelle Charlotte,意思是 I call myself Charlotte。很多动词都会添加类似于 me 的代词,即使在英语中没有类似表达方式。

  • je me
  • tu te
  • il/elle se
  • nous nous
  • vous vous
  • ils/ells se

示例:

  • Le matin, je me réveille tot
  • Il se couche tard

Body Language

英语说 He brushes his teeth,法语则通常用 le/la/les 替代 my/his。

  • Elle se brosse les cheveux

Weather

Quel temps fait-il?

在英语中谈论天气时通常以 it 开始,而法语中则是 il。

  • Il fait chaud (hot/warm)
  • Il neige (snowing)
  • Il y a du vent (windy)
  • Il fait soleil (sunny)

‘tis the season

说“在”那个季节或月份时,用 en,除了春天。

  • Je voyage an avril
  • En automne, il fait froid
  • Il fleut au printemps

Excuses, excuses

当我们想表达 It's too cold to swim的意思时,用 trop ... pour ...

  • Il fait trop froid pour nager
  • Il y a trop de vent pour sortir

People 5

I’m taller

在表达 taller/shorter 之类的比较级概念时,使用 plus/moins。

  • Ma fille est plus jenue que toi. (younger than you)
  • Ma fille est moins vieille que toi. (less old than you)

De quelle couleur sont tes yeux?

在询问 What color ...? 时,使用 De quelle couleur ...。

  • De quelle couleur sont tes yeux?

Sensations

Why? Parce que…

使用 parce que 表示 because,如果其后跟的是元音或静音 h,则使用缩略形式。

  • Je suis fatiguée parce que je dors mal.

Sors avec moi!

使用祈使句,把开头的 tu 去掉。

  • Tu dors beaucoup.
  • Dors bien.

Groceries

Je suis végétarienne!

在一个否定句(含有 ne ... pas)中,du/de la/des 都变为 de/d'。

  • Je mange de la viande
  • Je ne mange pas de viande

Où sont-ils?

prés de 中的 de 是包含了 le/les 的。

  • Les fruits sont prés des légumes.

Over there?

là 表示 here/right here,là-bas 则只表示 over there。

Shopping 2

X marks the spot

如果一个词以 -eau 结尾,那么它的复数形式是添加一个 x。

  • les beaux manteaux (jackets)
  • les nouveaux stylos

Celui-ci ou celui-là

  • this one: celui-ci/celle-ci
  • that one: celui-là/celle-là
  • these ones: ceux-ci/cells-ci
  • those ones: ceux-là/cells-là

City 3

Attention

告诉某人做某事时,如果动词是以 -er 结尾的,如 marcher,去掉 tu 的变位形式中的 s。

  • Ne reste pas ici.

而 vous 的则保持不变。

Quel beau bébé

  • Quel gentil chien! (What a nice dog)

Routine 2

Qu’est ce que tu fais?

询问 What...? 的常用方式是 Qu'est-ce que...?

  • Qu’est-ce que tu lis? (What are you reading)

That’s not faire!

faire 的变位是不规则的。

Tu ne te lèves pas?

当需要想含有 me/te 等词的句子中添加 ne...pas 时,应遵循此模式:

  • Tu ne te lèves pas tard. (You don’t wake up late)
  • Je ne me couche pas tot (TODO)

Leisure

当你 play 每种乐器时,用的动词是 jouer de。

  • Tu joues de la guitare?
  • Je joue du piano.

如果是 play 某种运动,则用 jouer à。

  • Nous jouons au football

Je ne t’aime plus

ne ... pas 中的 pas 可替换为诸如 jamais/rien/plus 这样的词,表示 never/nothing/anymore。

  • Tu ne fais pas de sport
  • Tu ne fais jamais de sport

Opinion

Savior 用于表示知道事实、信息或技能。connaître 则用于表示知道人或地点。

  • Je sais parler espagnol. (know how to speak)
  • Je connais Marie. (know Marie)

Je pense que tu as raison!

用 je pense 表示 I know。

  • Je pense que ce film est intéressant. (I know that)

My friend

copain/copine 可用于表示朋友或男/女朋友。

Friends 2

英语中,像 me 一样的代词出现在动词之后,在法语中,它们出现在动词之前。

  • Elle me parle.
  • Mes amis me connaissent bien.

On adore la musique

On 是表达我们的一种非正式方法,此时相应的代词变位与 il 一致。

Je sais que c’est ton anniversaire!

英语的从句中动词位置与一般陈述句相同,法语中则需要前置。

  • Vous savez où est l’hôtel?
  • Nous savons quand part le train.

J’aime Alice

动词 aimer 意为 to like 事物或 to love 人,对一个人使用 aimer bien 吧。

  • J’aime bien Sophie.

Nature

The smolest

要表达 the smallest 的意思,先看名词的性,再选择 le plus/la plus/les plus,置于形容词之前。

  • C’est le plus petit chien!
  • C’est la plus belle femme du monde!

J’entends de la musique

表达听到的意思时,使用 du/de la/des。

  • J’entends de la musique.

Family 3

My brother is grand

使用 grand/petit 分别表示 older/younger。

  • Ma grande soeur est gentille.
  • Mon petit frére jour de la guitare.

Je ressemble à ma mère

使用 ressembler à 表示长得像某人或某物。

  • Tu ressembles à ta soeur.

Four twenties?

vingt-deux 中的连字符不可省略,如果个位数是1,中间还要加 et。

School 2

Oooh le la

表达邀请 him/her/them 时,使用 le/la/les,同时把它们置于动词之前,然后此时的 le/la 必要时也需要变为 l'。

  • Elle le rencontre au café: She meets him at the cafe.

Je dis bonjour à Laura

表达告诉某人某事,使用 à。

  • Nous disons à Thomas quand nous partons en vacances.

Ça marche!

根据上下文的不同,ça 可以表示 it/this/that。

  • Tu aimes ça?: Do you like it?
  • Je ne sais pas dire ça en anglais. (that)

Food 2

Je suis en train de dormir

使用 en train de 表示正在做某事。

I have a sweet tooth

表达食物的某种口味,使用 à。

  • Je préfère la glace à la vanille. (I prefer vanilla ice cream)

What are you bringing along?

表达类似于 I want something to drink时,使用 à。

  • J’apporte quelque chose à boire.

Routine 3

Mais pourquoi?

诸如 quand/pourquoi 这样的疑问词在 est-ce que 之前,注意使用 avec 的情况。

  • Pourquoi est-ce que tu te réveilles tard?
  • Avec qui est-ce que tu sors?

Qui est prêt?

当谈及的并非特定的人,默认使用词的阳性形式,除非谈及的全是女性。

To Know

使用 savoir 表示知道事实或如何做某事,使用 connaître 表示熟悉某人或某事。

Travel 4

Penser à moi

可使用 penser à 表示“考虑”。

  • Nous pensons à cette chanson.

Dans un mois, nous allons en France

这里的 dans,恰似英语中的 in。

Health

What must I do?

Il faut 用于表示某人应当或不应当做什么。

  • Il faut manger des fruits: one must eat fruits.

Well excusez-moi!

表示 bossy 的语气时,如果动词具有诸如 me/te 这样的代词,那么命令式会表示为 Réveille-toi。

J’ai mal à la tête

  • J’ai mal à la main: My hand hurts.

Housing

What have you done?

(第一次)使用某种方式表示过去发生的事情,类似于英语中的 have done,不过 avoir 有形式变化。

  • Nous avons acheté une voiture: We bought a car.

The big, the good

  • le T-shirt rouge: le rouge

At Work 3

I just said that

使用 venir de 表示某事刚刚发生。

  • Nous venons de manger: we just ate.

J’attends

不像英语中的 Wait for,法语中可直接使用 J'attends Marie。

Je donne un cadeau à Jeanne

给某人某物,只能使用此形式,不能使用 give sb. sth.。

Memories

I was an imparfait student

第三种过去时表示法:描述过去常常做某事,或某事物曾经如何,使用:

  • Quand j’étais à l’université, j’etudiais le francais.

Souviens-toi

法语中,se souvenir 之后总是跟着一个 de。

  • Tu te souviens de tout.

Leisure 2

I am arrived

第四种过去时:表示过去的动作,如 aller/arriver,使用 être 而非 avoir。此时 être 与其后的动词有性和数的变化。

  • Je suis allé en vacances au Japan: I went on vacation to Japan.

Il faisait très froid

表示过去的天气,用 Il y avait 或 Il faisait。

At Home 3

Help me to do this

法语中,用 J'aide à nettoyer la cuisine,表示帮助做某事。

Tu m’aides à ranger?

如题,此表达本身为礼貌用语,含 Should/Can 之意。

Commands

Let’s talk about commands

告诉某人做某事,省略 tu/vous:

  • Prends une salade.
  • Ne reste pas ici: 去掉末尾的 s。

Travel 5

Je n’ai pas apporté une veste.

如题,表示否定式。

Je paye le repas

Je paye 可表示 I am buying 或 I am paying。

Sentences

  • Je vais faire les courses. (go shopping)
  • Je suis plus grande qu’avant
  • Elles sont plus minces que nous
  • Que fais tu le soir? (What do you do in the evening)
  • Tu réserves une chambre dans cet hotel?

附录

名词及其搭配词的变化

  • 名词:
    • 因数而变化:
  • 冠词:le/la/les; un/une;因性、数而变化;
  • 形容词:一般是名词之后,但有例外;因性、数而变化;
    • homme content/femme contente/femmes contentes
    • une nouvelle boulangerie
  • 代词:mon/ma,因性、数而变化;
    • mon frére/ma soeur/mes fréres
    • ton/ta/tes
    • son/sa/ses
    • ce plat/cette pomme
    • ces plats/ces pommes

与动词

动词因人称而变化,见 现在时 一节。

冠词

如果名词为复数,而且具体数目不重要,则总是使用 des,此时它的意思是 some。

  • Ils ont un enfant
  • Ils ont des enfants

现在时(Pres Tense)

所有动词都随人称不同而有相应的变化:

  • je parle
  • tu parles
  • il/elle parle
  • nous parlons
  • vous parlez
  • ils/ells parlent

aller: je vais/tu vas/il(elle) va/
avoir: ai/as/a
venir: viens/vient/venons

如果有连续两个动词,第二个词的形式必须以 -er/ir/re 结尾。

  • Je dois venir. (I have to come)
  • Je dois manger. (I have to eat)

疑问句

有几种表达方式。

  • 使用陈述句形式,以问号结束
  • 动词提前:Voyagez-vous avec votre fille?
  • 疑问词:
    • Est-ce que tu veux du lait? (Do you …)
    • Quel train va à Paris? (Which)
    • Quelle est votre profession (What)
    • Qu’est ce que tu manges? (What are you eating?)
    • Tu préfères quoi?
    • Tu finis à quelle heure? (You finish at what time?)
    • Combien de journaux voulez-vous? (How many)
    • Vous voulez rester combien de nuits? (How many)
    • Vous choisissez quelle date? (Which date are you choosing?)

不规则动词表

  • be
  • go
  • have
  • take
  • speak
  • eat

词汇表

数词

  • zéro
  • un/une: one
  • deux: two
  • trois
  • quatre
  • cinq
  • six
  • sept
  • huit
  • neuf
  • dix: ten
  • onze
  • douze
  • treize
  • quatorze
  • quinze
  • seize
  • dix-sept
  • dix-huit
  • dix-neuf
  • vingt

星期

  • lundi: Monday
  • mardi: Tuesday
  • mercredi: Wednesday
  • jeudi: Thursday
  • vendredi: Friday
  • samedi: Saturday
  • dimanche: Sunday

月份

  • mars: March
  • avril: April
  • juillet: July
  • août: August

季节

  • été: summer

General

  • a:
  • achète: buy
  • aller: to go
  • anglais/anglaise: English
  • amusante: funny/amusing
  • arbre: tree
  • avion: plane
  • beau: nice
  • besoin: need
  • blanc/blanche: white
  • boire: drink
  • bon/bonne: good
  • bouteille: bottle
  • cafè: coffee
  • chat: cat
  • chaud: hot
  • chauffeur: driver
  • cher: expensive
  • choisir: to choose
  • collègue
  • content: happy
  • couleur
  • croissant: croissant
  • dangereux: dangerous
  • dans: in
  • de: of
  • derrière: behind
  • dessiner: to draw
  • eau: water
  • écoute: listen
  • église: church
  • et: and
  • été: summer
  • étudier: to study
  • fille: girl/daughter
  • finir: to finish
  • fleur: flower
  • frére: brother
  • fromage: cheese
  • froid: cold
  • idée: idea
  • immeuble: apartment building
  • intelligent: intelligent/smart/clever
  • intéressant: interesting
  • gentil: kind/nice
  • grand: big
  • horaire: schedule
  • Italie: Italy
  • jardin: garden
  • je: I
  • lettre (n.f): letter
  • lieu: place
  • magasin: store
  • maison: house
  • manger: to eat
  • matin: morning
  • médecin: doctor
  • métier: occupation
  • midi: noon
  • moi: me
  • monsieur: sir/mr.
  • noir/noire: black
  • non: no
  • oeuf: egg
  • ou: or
  • ouvert: open
  • pantalon:
  • parc: park
  • parfaite
  • pays: country
  • personne: person
  • petit: small *
  • pizza
  • plat: plate
  • pomme: apple
  • pont: bridge
  • pour: for
  • pouvez: can
  • près du: close to
  • que: that
  • quelque chose: something/anything
  • robe: dress
  • rue: steet
  • s’il vous plait
  • sais: know
  • salade: salad
  • sandwich
  • soeur: sister
  • table: table
  • tasse: cup
  • thé: tea
  • travaille: work
  • très: very
  • trop: too
  • trouver: find
  • toilette: restroom
  • un/une: a
  • usine: factory
  • vendredi: Friday
  • verre: glass
  • veste: jacket
  • vetement: clothes
  • veux: want
  • voisin: neighbor
  • voiture: car
  • voudrais: would like
  • voyager: to travel

interesting-python-libraries

Posted on 2020-08-11 | In Python

偶遇的有趣的 Python 库。

attrs

attrs 将为你找回编写类(classes)的乐趣,能够减轻大量的 dunder methods。我们写出的类型的代码会更简洁,更少出错。

日常应用

  • 类型标注:编写自文档代码,如借助于 attr.ib。
  • 类型初始化
  • Hashing
  • …

声明 attributes 后,可以获得:

  • a concise and explicit overview of class’s attribs
  • a nice human-readable __repr__
  • comparison methods (equality and ordering)
  • an initializer
  • …

自 Python 3.6 开始,还可以不使用 attr.ib 而是直接用 type annotations,当然,前提是你希望将标注所有的属性。

借助于 attrs,可在代码中方便地使用自定义类型而非 tuples,以及令人困惑的 namedtuples。之所以使用 tuples,往往是为了方便省事儿,但有了 attrs,写个自定义类型也不麻烦了。

attrs 不是什么

attrs 不会偷偷地使用 meta classes、runtime introspection 以及 interdependencies。它所做的是:

  • 使用你的声明
  • 为你定义 dunder methods
  • 将这些方法 attach 到你的类型

因此不会有任何的性能损失。

attr.s 与 attr.ib

它们看起来很不自然?把 . 去掉试试。

既然已经有了…,为何还要用 attrs?

tuples

  • 可读性:无须赘述
  • 可扩展性:增加元素,会导致一系列代码失效

namedtuples

If you want a tuple with names, by all means: go for a namedtuple. 5 But if you want a class with methods, you’re doing yourself a disservice by relying on a pile of hacks that requires you to employ even more hacks as your requirements expand.

Data Class

attrs 与 Data Class 很像,但 attrs 有功能更多,演进更快速。Data Class 只能用于 py37 之后。

dicts

如果把值看作kv 对,tuples 可看作是隐藏了 keys;dict 看起来更完备一些,但是此时的 keys 往往是 str。

if your dict has a fixed and known set of keys, it is an object, not a hash. So if you never iterate over the keys of a dict, you should use a proper class.

Data Class

在了解了 attrs 后,感觉Data Class可能更可取,因为它属于标准库,更可靠,而且一般不需要考虑py37 之前的版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
from dataclasses import dataclass

@dataclass
class DataClassCard:
rank: str
suit: str

# init: positional, keywords
queen_of_hearts = DataClassCard('Q', suit='Hearts')
# repr
print(queen_of_hearts)
# eq
print(queen_of_hearts == DataClassCard('Q', 'Hearts'))

通过这个简单的例子可以看到 dataclass 比常规自定义类型多做的三件事情,同时也优于用作数据容器的 tuple、dict。

pyqtgraph

pywebview

colorama

begins

arrow

parsedatetime

Cython

https://github.com/vinta/awesome-python

exploratory-data-analysis-nlp-tools

Posted on 2020-07-30 | In NLP

原文链接

Exploratory Data Analysis(探索性数据分析,EDA)是分析数据集以获取其主要特征的一种方法,通常会结合使用可视化方法。它主要是来查看,在借助于正式的模型与假设检验之外,数据还能告诉我们什么。在历史上,John Tukey是推广EDA的关键人物(1977年,出版同名书籍)。

本文通过实例讨论在NLP中的EDA。

开始之前

安装

1
2
3
4
pip install \
pandas matplotlib numpy \
nltk seaborn sklearn gensim pyldavis \
wordcloud textblob spacy textstat

数据

ABC News Headlines

文本统计

文本的可视化统计数据很简单,但能给出有效的信息。

  • 词频
  • 句长
  • 平均词长
  • …

以此了解文本数据的基本特征。对continuous data,使用histogram,对categorical data,使用bar chart。

参考:
Exploratory_data_analysis

practical-nlp-text-repr

Posted on 2020-07-13 | In NLP

Text Representation(文本表示)

Distributed Representations(分布式表示)

前述几种基本表示法有着明显的缺陷,比如:

  • 它们都是离散化表示,即把语言单位(词、ngrams等)视为原子单位,因此不能捕捉到词之间的关系
  • 特征向量是稀疏和高维的表示,维度与词汇表大小一致,从而导致向量的绝大部分元素为0,这一结果不利于学习,也使得计算过程颇为低效
  • 不能有效处理未登录词

因此需要能够学习到低维向量表示的新方法,这些方法在过去六七年(2013年开始)中得到了迅速发展。它们使用NN架构创建出稠密(而非稀疏)的、低维(而非高维)的词与文本的表示。了解这些方法之前,需要先了解分布语义学。

Distributional Semantics(分布语义学)

分布语义学是基于语言项(linguistic items)在大量语言数据上的分布性质,对其相关性进行量化与分类的一系列理论与方法。它的基本思想基于所谓的分布假设:具有相似分布的语言项也具有相似的语义。

Distributional Hypothesis

分布假设背后的思想是:”a word is characterized by the company it keeps“(Firth 1950s)。分布假设是统计语义学的基础。

孩子在学习语言时,对于未见过的词,仍然可以正确使用,也是基于此假设(通过已了解词的用法去泛化)。

Distributional Similarity(分布相似度)

它的要义是:词的语义可通过其上下文来理解。

可以理解为:两个词在分布上越相似,其语义即越相似。

Distributional Representation(分布表示)

获取一个词在”分布“意义上的向量表示。

大龄男青年相亲故事一则

Posted on 2020-07-04 | In 故事

村中有一个大龄单身男青年,相亲屡次失败,一家人为此都很是拿急。说起来,失败的原因不是因为太穷,或者太矮、太土,只是因为他的嘴实在有些大。

一天,村里一位大姐来家里耍,聊起了相亲的事儿,便问:“你和那些闺女一般都拉些什么?”他说,就是家常啊,不知道为什么就是不行。一次典型的聊天可能是这样的:

女:你属什么?
男:属马。
女:你喜欢吃什么?
男:吃瓜(地瓜)。
女:那你喜欢看什么?
男:看花。

大姐听了,沉吟了一会儿说:“这样,以后你就这么说:我属虎、喜欢吃红薯、喜欢看竹。”

很快,下一次相亲机会来了,在女方家里。男青年按大姐的指点一一作答,没有什么破绽,大家都挺满意的。女方留男青年在家吃午饭,吃饺子。不巧的是,家里醋没了,吃饺子可不能没有醋啊,男青年主动提出去打醋。

过了一会儿,男青年端着一碗醋回来了,奇怪的是只有小半碗儿。那个闺女问起原因,男青年说:“本来是打了满满的一碗,都洒咯。”

Deep Learning in PyTorch

Posted on 2020-06-12

Deep Learning in PyTorch

该书的读书笔记,想从此系统的学习DL,尤其是NLP相关。

1. Introducing DL and PyTorch library

The deep learning revolution

即使到2000年代末,ML领域仍然很依赖于特征工程(feature engineering)。特征用于将输入数据转换为数值,以用于下游算法。特征工程的目标是接受原始数据,得到其表示(representation)。

DL则将特征寻找过程自动化了。虽然,DL中仍需要特征工程,它的重点不再是精心构建特征,而是通过对数学实体的操作”发现“这些特征。通常情况下,这些自动发现的表示优于手工构建的。

1.3.2 Immediate versus deferred execution

DL库们的一个关键区别是立即执行与延迟执行。PyTorch的易用性很大程度上来自于它的立即执行的实现方式。

PyTorch默认情况下使用立即执行(eager mode)。

NN的基础组块是neuron,大量neuron连接在一起构成网络。之前TF默认使用静态图,而PyTorch使用动态图,之后两者逐渐同时支持两种模式。

1.4 PyTorch 的组件

其核心是多维数组——tensor,以及对tensor的诸多操作,这些都在torch 模块中。

创建NN的模块在 torch.nn 中,如全连接层,卷积层,激活函数,损失函数之类。

要训练模型,我们还需要:数据源管理,optimizer。加载与处理数据的工具在 torch.util.data,两个主要的类是 Dataset 和 DataLoader。optimizer位于 torch.optim 模块中。

2. It starts with a tensor

在很高的层次上,DL可以理解为将一种输入转换为另一种形式的输出。

转换过程的第一步,需要将输入表示为浮点数。之后的

async-in-c#

Posted on 2019-12-31

有所不为的反叛者 - 笔记

Posted on 2019-12-31 | In Love

作者:罗新

小序

本书来自于近年的随笔,多与专业反思有关,或者是反应了作者对史学工作的理解。

和相当多的史学从业者一样,我更愿意处理具体的个案研究,而不是在理论层面进行思辨。

历史学家的美德

历史与历史学

历史有什么用?这是一个伪命题,因为:

历史是人类精神的基本构造,是人类的思维形式,离开了历史就不会有人类的思维。

此处的历史,可以理解为“过去”,那么谁会问“过去有什么用?”

历史学有什么用?这是值得讨论的。

历史不等于过去,“过去”只有被诠释、被讲述之后才成为“历史”。历史是对过去的讲述,无比巨大、混沌一团的过去中被赋予了秩序和意义并且被讲述出来的那很小很小的一部分,才是我们所说的历史。

这里的历史由“历史学”简化而来:历史总是被讲述出来的,被讲述的只是极小的一部分,过去的单一方向和线索成为

儿时伙伴

Posted on 2019-11-08 | In 故事

前几天生日时,和我娘聊起来一个人,他的有点儿戏剧性的故事,让我想起来他也算是儿时伙伴之一了。

在村子里,不止是与村外联系少,村内也是如此,当时一起耍的,也只限于邻近家同龄的孩子。其中有一个打我一岁的,小名俩字和我的是反过来的,姑且称他为 H。

H 属于对学习毫无兴趣的那种,但算是比较灵头(灵活的头脑之意)的,形貌也高于均值。很早就到市里厮混,相形之下颇有些见识,我初中时的一盘流行歌曲正版磁带,就是从他那里拿到的。多年之后回忆起来,里面还有一首《黑梦》。印象中的样子是,他见到你,露出笑容,跟你开几句玩笑,满嘴”油腔滑调“。

小学时,为解决灌溉问题,村里集资在小河流经处挖了一个大坑,人称”大湾“,号称有十米之深。这里成为当时孩子们渴望去探索的地方,虽然基本上都不会真正地游泳。听闻有一次,他带着一群孩子去游泳,一个孩子游到中间开始往下沉,呼喊救命,他赶紧跳下去,把那个孩子救了上来。后来孩子的父母送去一筐水果作为答谢。

曾跟随他偷过葡萄、海棠果、苹果之类,至于为何没偷其它水果,只是因为附近没有种的。但他还偷钱,这似乎是性质严重得多的事情。

上了高中之后,我再也没有偷过东西,和他也很少会见面。听说,有个女孩子喜欢她,趄(ju)着他不走,他不太喜欢她,不过后来他们还是结婚了。

如果他此后变得安分,也有点浪子回头的意味了,但是没有。听说,他伙同姨妈的表兄弟及邻村的一人,去绑架了当地某厂长的母亲。不知细节如何,但结果是正好一辆车过来,轧死了老太太,他不得不承担这一切。

他被带走的那个夜晚,他的儿子也出生了,我想当时应该是大雨如注吧。

123…5
Anders Cui

Anders Cui

47 posts
13 categories
30 tags
© June 2017 - 2021 Anders Cui
Powered by Hexo
Theme - NexT.Mist