Lisp粉如何看待《Why calculating is better than scheming》?

時間 2021-05-31 15:08:39

1樓:

全文總結就是wadler吐槽scheme少4樣東西:模式匹配,語法設定,靜態型別,預設的惰性求值。不應該拿來做教學

有得必有失,除了模式匹配比較贊同以外,其他三樣都是要加重初學者學習負擔的,本來sicp的定位就是入門學習材料,scheme的定位就是用最少的語法和語義實現最多的語言功能,我覺得沒必要搞那麼複雜。何況那麼簡單的東西,還未必能搞懂

而且,動態型別和靜態型別,惰性求值和嚴格求值,只能說各有千秋吧,誰也取代不了誰,sicp第二版後來也有關於流(惰性求值)的內容

只能說wadler那時候正年輕,恰逢惰性求值語法最激情燃燒的年代,想法比較激進很正常。現在知乎上已經有人在問惰性求值是不是乙個錯誤了

2樓:

不是little lisper/schemer/prover/typer... 哈哈(typer 是新書,下面會說到)

我在初看的時候,我甚至覺得裡邊很多東西是因為 taste 生出的偏見,比如 quote 什麼的,是可以用學習來克服的,另外,我們也可以 argue 很多語言裡都有有趣但是 tricky 的部分。

但是跟 @楊雙成 觀點完全相反的,我覺得唯一的痛點就是 pattern matching。當然我們可以用 Scott encoding(有些想要小 kernel 的語言就是這麼做的),但我還是覺得像 Coq 做成 primitive 比較好。

至於 s-exp,我有兩種完全對立的想法。語言的一種特徵(甚至不是特性)常常引領著其開發者把它往不同的方向推進。

大家都知道,s-exp 恐怕是最自然的讓人往 meta programming 的方向走的特徵了。而在 academia 裡未必受到很多關注的「語言的使用感」方面,Lisp 系也還有這幾樣好處:做 code formatter 真的 trivial; tab 跟 space 的問題被 define 掉了;切整個 s-exp 下來完全沒有額外的心智壓力。

我甚至還要說,寫好複雜的型別時,用 s-exp 都很自然。和 就是跟 let 長一樣:

(let ((a

1)(b

2))some-exp)(

Π((aA

)(bB

))some-term

)我們再也不用被提醒 是 了,就因為 也(被逼著)寫成 prefix 的關係。一成串的箭頭還可以搞成這樣,真的簡潔(→

abcd

e)「沒有乙個 theorist 可以拒絕這樣的契合的感覺」,我是這樣想的,然後我試了一下這個:the-little-typer/pie,一門 dependent typed 的 Racket。可是這型別吧,我覺得真的太多括號了。

當然相反的,我們也可以想象,這樣一門語言對廣大想要玩一下「高階的」型別系統的 lisper,是多麼有吸引力。大家可以從這裡感受一下:The Pie Reference。

但是故事到這裡還沒完,RedPRL/sml-redprl 的開發者顯然還是沒有放棄這樣精巧的對應關係(當然也可能這樣做起來簡單),它的 object language 就用的 s-exp。需知,RedPRL 是用 Standard ML 開發的(MLer 對自己用的語言的外貌可超有自信的)。

3樓:楊雙成

pattern matching 真不是什麼痛點。

倒是他提到的,quote 容易迷惑人,倒是真的。

好多lisp沒入門的人,以為自己懂得 quote是什麼,其實不懂。

4樓:開源醬

他寫這篇文章的時候 Scheme 裡的確沒有這些東西啊

沒有 Pattern Matching 的確是 pain in ass,所以在 Racket 裡是作為標準的一部分存在的,在 Common Lisp 裡有至少十個不同的庫實現(辣雞 CL 裡沒有這種東西不是很正常嘛)(天國的 MLisp 2 / Lisp 70)

他後面用了很長的篇幅去說 Miranda 那個語法比 S 表示式怎麼怎麼優越,(對於初學者來說)乙個是字首表示式會造成一定的困擾(說不定愛爾蘭人還覺得很舒服呢(逃,乙個是用列表去表示程式和資料會造成混淆,但是這只能說是設計思路的區別而已,你看他就沒說在 Miranda 裡怎麼玩 meta-programming 不是(逃

我資瓷靜態型別,自定義型別在 Scheme 之外的 Lisp 方言裡幾乎都有

用巨集實現個 delay / force 很難? 而且你在 Scheme 裡都有 first class continuation 了,Okasaki 的 Call-by-need and Continuation-passing Style 了解一下?

他後面舉的例子裡很多都是因為早期的 Scheme 並沒有很好的組織結構的能力導致的,比 Scheme 還早一點的 ZetaLisp (也有另外乙個分支叫 Lisp Machine Lisp,很大程度上影響了 Common Lisp 的設計)甚至都已經有物件系統了

這篇文章發表的時候 Scheme 標準還沒確定呢(IEEE 1178-1990 是 1990 年才制定的)

如何看待「粉書不粉人」?

餵魚抽貓 個人認為這個情況不屬於粉書不粉人。抄襲是作者本人的行為,但接連導致這本書已經有問題了,所以繼續粉就有點那啥了。不過如果實在喜歡這本書,私下裡看,頂多自娛自樂,不要和別人安利繼續造成不好的影響,也就沒人會怪罪什麼了。真正的粉書不粉人,參考印度某個殖民文學巨頭,他從哪方面看都不是啥好人,但他領...

如何看待清粉?

王小智 別說清粉,包括各種朝代的粉,都是歷史讀得少的人,包括整個世界史在內,任何朝代,任何時代的強大,背後都是苦難的人民,漢武帝把匈奴趕到漠北,最後自己也下了罪己詔,李世民一生文武雙全,最後也深刻反省自己大興土木之事,成吉思汗接見了丘處機之後,也深刻反省到自己一些違揹人道的事情,這些皇帝自己都在可憐...

河粉如何看待孫芮新增秀粉?

怎麼定義 河粉 看了上乙個回答,說什麼秀芬ky壞了你河的規矩。本來我攢了一大堆恩狗ky圖鑑,現在覺得只放這一張就夠了。這張圖里的做法,說是ky之王不過分吧。光是看著我都窒息了,難以想象當時艾斯喵的心情。說什麼秀芬ky都比不上恩狗的萬一。恩狗這不僅ky到正主面前,還是踩著艾斯兔和艾斯喵的臉。圖里這ky...