自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Pyret 編程語言:探索腳本語言和函數(shù)式編程的融合

開發(fā) 后端
Pyret 是一門基于 JavaScript 的腳本語言,旨在成為編程教育的絕佳選擇,同時探索腳本語言和函數(shù)式編程的融合。目前 Pyret 正處于積極設(shè)計和開發(fā)階段,開發(fā)者可以自由使用或?qū)ζ溥M(jìn)行修改。

Pyret 是一門基于 JavaScript 的腳本語言,旨在成為編程教育的絕佳選擇,同時探索腳本語言和函數(shù)式編程的融合。目前 Pyret 正處于積極設(shè)計和開發(fā)階段,開發(fā)者可以自由使用或?qū)ζ溥M(jìn)行修改。

Pyret 語法介紹

Pyret 具有受 Python 啟發(fā)的函數(shù)、列表和運(yùn)算符語法,其迭代結(jié)構(gòu) (Iteration constructs) 的設(shè)計為了調(diào)用其他語言中的迭代結(jié)構(gòu)。 

  1. fun to-celsius(f): 
  2.   (f - 32) * (5 / 9) 
  3. end 
  4.  
  5. for each(str from [list: "Ahoy""world!"]): 
  6.   print(str) 
  7. end 

Pyret 支持簡潔、富有表現(xiàn)力、遞歸的數(shù)據(jù)聲明,支持可選的類型注釋,支持增量添加,以滿足各種教學(xué)風(fēng)格和課程需求。 

  1. data BinTree: 
  2.   | leaf 
  3.   | node(value, left :: BinTree, right :: BinTree) 
  4. end 

Pyret 的測試是編程過程的自然組成部分。函數(shù)可以在where:子句中結(jié)束,該子句為函數(shù)提供了單元測試,并且這些斷言 (Assertions) 會被動態(tài)檢查。 

  1. fun sum(l): 
  2.   cases (List) l: 
  3.     | empty => 0 
  4.     | link(first, rest) => first + sum(rest) 
  5.   end 
  6. where
  7.   sum([list: ]) is 0 
  8.   sum([list: 1, 2, 3]) is 6 
  9. end 

對于縮進(jìn)的問題,Pyret 團(tuán)隊認(rèn)為縮進(jìn)對于代碼的可讀性至關(guān)重要,但他們不希望通過程序的空格來確定其含義。相反,程序的含義應(yīng)該決定它的縮進(jìn)結(jié)構(gòu)??s進(jìn)只是另一個上下文敏感的規(guī)則。

明確的語法(Pyret 使用顯式end分隔符的原因)意味著開發(fā)者可以從電子郵件或 Web 復(fù)制和粘貼代碼,而不會改變其含義。IDE 會幫助開發(fā)者重新縮進(jìn)代碼,無需擔(dān)心這樣做會改變程序的含義。

亮點(diǎn)

注解 (Annotations)

與大多數(shù)腳本編程語言不一樣,Pyret 支持開箱即用地檢查參數(shù)上的注解。

Python 

  1. def square(n : int) -> int
  2.   return n * n 
  3. square("5"
  4. # Error at multiplication: 
  5. # Can't multiply sequence by 
  6. # non-int of type 'str' 

Pyret 

  1. fun square(n :: Number) -> Number: 
  2.   n * n 
  3. end 
  4. square("5"
  5. With type checker off
  6. # The Number annotation was not 
  7. # satisfied by the value "5" 
  8.  
  9. With type checker on
  10. # Number is incompatible with String 

支持長度較長的數(shù)字類型

Java 

  1. // this is not true 
  2. ((1 / 3) * 3) == 1 

Pyret 

  1. # this is true 
  2. ((1 / 3) * 3) == 1 

結(jié)構(gòu)化數(shù)據(jù)

Pyret 為編寫數(shù)據(jù)定義提供了優(yōu)雅的機(jī)制,而無需開發(fā)者具備對類的認(rèn)知背景,以及語法開銷。

Python 

  1. class BinTree: 
  2.   pass 
  3. class leaf(BinTree): 
  4.   def __init__(self): 
  5.     pass 
  6. class node(BinTree): 
  7.   def __init__(self, v, l, r): 
  8.     self.v = v 
  9.     self.l = l 
  10.     self.r = r 

Pyret 

  1. data BinTree: 
  2.   | leaf 
  3.   | node(v, l, r) 
  4. end 

Pyret 在使用結(jié)構(gòu)化數(shù)據(jù)方面也非常靈活,并在其底層公開了一個簡單的對象模式,支持結(jié)構(gòu)化代碼與更多 nominal 模式搭配使用。

OCaml 

  1. type animal = 
  2.   | Elephant of string * float 
  3.   | Tiger of string * float 
  4.   | Horse of string * int 
  5.   ... 
  6.  
  7. let name_of_animal a = 
  8.   match a with 
  9.     | Elephant(name, _) 
  10.     | Tiger(name, _) 
  11.     | Horse(name, _) -> name 
  12.     ... 

Pyret 

  1. data Animal: 
  2.   | elephant(name, weight) 
  3.   | tiger(name, stripes) 
  4.   | horse(name, races-won) 
  5.   ... 
  6. end 
  7.  
  8. fun animal-name(a :: Animal): 
  9.   a.name 
  10. end 

Racket 

  1. (struct elephant (name weight)) 
  2. (struct tiger (name stripes)) 
  3. (struct horse (name races-won)) 
  4. ... 
  5.  
  6. (define (animal-name a) 
  7.   (cond 
  8.     [(elephant? a) (elephant-name a)] 
  9.     [(tiger? a) (tiger-name a)] 
  10.     [(horse? a) (horse-name a)] 
  11.     ...)) 

Pyret 

  1. data Animal: 
  2.   | elephant(name, weight) 
  3.   | tiger(name, stripes) 
  4.   | horse(name, races-won) 
  5.   ... 
  6. end 
  7.  
  8. fun animal-name(a :: Animal): 
  9.   a.name 
  10. end 

運(yùn)行 Pyret

通過訪問 code.pyret.org 直接在瀏覽器中運(yùn)行 Pyret,這是最簡單的入門方法。查看導(dǎo)覽以了解小部分程序和語法示例。

如果希望在命令行中在使用 Pyret 進(jìn)行編程,需要從 https://www.npmjs.com/package/pyret-npm 安裝pyret-npm,安裝命令如下:

  1. npm install -g pyret-npm 

根據(jù) Pyret 的官網(wǎng)介紹,目前該項目正在積極開發(fā)三個非常重要的功能:

  • 支持靜態(tài)類型,提供帶有標(biāo)簽聯(lián)合 (tagged unions) 和類型檢查器的傳統(tǒng)類型系統(tǒng)
  • 使用表作為存儲現(xiàn)實世界數(shù)據(jù)的關(guān)鍵類型
  • 交互式計算模型基于 “world” model

其團(tuán)隊認(rèn)為 Pyret 也已經(jīng)足夠成熟,因為它實現(xiàn)了自托管編譯器。這意味著,當(dāng)開發(fā)者在瀏覽器中運(yùn)行 Pyret 時,它會加載實現(xiàn)了 Pyret-to-JavaScript 編譯器的 JavaScript 代碼(即開發(fā)者輸入的 Pyret 代碼會編譯成 JavaScript 并在瀏覽器中運(yùn)行)。這個編譯器是由 Pyret-to-JavaScript 編譯器通過編譯 Pyret-to-JavaScript 編譯器產(chǎn)生的。

本文轉(zhuǎn)自O(shè)SCHINA

本文標(biāo)題:Pyret 編程語言:探索腳本語言和函數(shù)式編程的融合

本文地址:https://www.oschina.net/news/156822/pyret-language

 

責(zé)任編輯:未麗燕 來源: 開源中國
相關(guān)推薦

2011-08-16 10:03:45

Groovy編程語言Web

2011-08-16 10:37:07

Web

2013-08-01 09:33:52

編程語言胖手編程編程姿勢

2013-08-01 09:08:21

編程語言

2009-04-09 11:44:18

編程語言排行榜腳本語言

2011-06-09 09:52:41

F#

2017-11-13 10:46:24

編程語言排行榜腳本語言

2024-04-02 08:00:00

函數(shù)式編程開發(fā)

2019-12-06 17:40:39

程序員編程語言JavaScript

2009-06-22 13:43:01

F#函數(shù)式編程

2009-06-10 08:41:15

Linux腳本語言

2022-09-16 07:32:15

編程計算機(jī)命令

2010-02-24 14:04:32

Python腳本語言

2011-08-22 18:00:53

Lua語言

2010-03-19 09:39:17

Python編程語言

2012-09-28 13:23:43

編程語言語言進(jìn)化程序員

2021-05-28 05:34:06

Golang語言編程

2021-01-13 10:40:42

編程語言PLCGraph

2009-11-09 17:51:51

F#函數(shù)式編程

2011-08-22 16:59:28

Lua
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號