成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
Pyret 是一門基于 JavaScript 的腳本語言,旨在成為編程教育的絕佳選擇,同時探索腳本語言和函數式編程的融合。目前 Pyret 正處于積極設計和開發階段,開發者可以自由使用或對其進行修改。

Pyret 是一門基于 JavaScript 的腳本語言,旨在成為編程教育的絕佳選擇,同時探索腳本語言和函數式編程的融合。目前 Pyret 正處于積極設計和開發階段,開發者可以自由使用或對其進行修改。

Pyret 語法介紹

Pyret 具有受 Python 啟發的函數、列表和運算符語法,其迭代結構 (Iteration constructs) 的設計為了調用其他語言中的迭代結構。 

  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 支持簡潔、富有表現力、遞歸的數據聲明,支持可選的類型注釋,支持增量添加,以滿足各種教學風格和課程需求。 

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

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

  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 

對于縮進的問題,Pyret 團隊認為縮進對于代碼的可讀性至關重要,但他們不希望通過程序的空格來確定其含義。相反,程序的含義應該決定它的縮進結構。縮進只是另一個上下文敏感的規則。

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

亮點

注解 (Annotations)

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

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 

支持長度較長的數字類型

Java 

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

Pyret 

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

結構化數據

Pyret 為編寫數據定義提供了優雅的機制,而無需開發者具備對類的認知背景,以及語法開銷。

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 在使用結構化數據方面也非常靈活,并在其底層公開了一個簡單的對象模式,支持結構化代碼與更多 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 

運行 Pyret

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

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

  1. npm install -g pyret-npm 

根據 Pyret 的官網介紹,目前該項目正在積極開發三個非常重要的功能:

  • 支持靜態類型,提供帶有標簽聯合 (tagged unions) 和類型檢查器的傳統類型系統
  • 使用表作為存儲現實世界數據的關鍵類型
  • 交互式計算模型基于 “world” model

其團隊認為 Pyret 也已經足夠成熟,因為它實現了自托管編譯器。這意味著,當開發者在瀏覽器中運行 Pyret 時,它會加載實現了 Pyret-to-JavaScript 編譯器的 JavaScript 代碼(即開發者輸入的 Pyret 代碼會編譯成 JavaScript 并在瀏覽器中運行)。這個編譯器是由 Pyret-to-JavaScript 編譯器通過編譯 Pyret-to-JavaScript 編譯器產生的。

本文轉自OSCHINA

本文標題:Pyret 編程語言:探索腳本語言和函數式編程的融合

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

 

責任編輯:未麗燕 來源: 開源中國
相關推薦

2011-08-16 10:03:45

Groovy編程語言Web

2011-08-16 10:37:07

Web

2013-08-01 09:08:21

編程語言

2013-08-01 09:33:52

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

2009-04-09 11:44:18

編程語言排行榜腳本語言

2011-06-09 09:52:41

F#

2024-04-02 08:00:00

函數式編程開發

2017-11-13 10:46:24

編程語言排行榜腳本語言

2019-12-06 17:40:39

程序員編程語言JavaScript

2009-06-10 08:41:15

Linux腳本語言

2022-09-16 07:32:15

編程計算機命令

2009-06-22 13:43:01

F#函數式編程

2010-03-19 09:39:17

Python編程語言

2012-09-28 13:23:43

編程語言語言進化程序員

2010-02-24 14:04:32

Python腳本語言

2011-08-22 18:00:53

Lua語言

2021-05-28 05:34:06

Golang語言編程

2021-01-13 10:40:42

編程語言PLCGraph

2009-11-09 17:51:51

F#函數式編程

2020-06-02 08:54:47

編程語言C語言程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费三级网 | 中文字幕av在线播放 | 人妖av | 一区二区三区视频在线免费观看 | 91色视频在线 | 国产精品久久一区二区三区 | 狠狠色香婷婷久久亚洲精品 | www在线视频 | 亚洲人成人一区二区在线观看 | 精品三级| 中文成人在线 | 久久伦理中文字幕 | 久久99精品久久久久久国产越南 | 综合激情久久 | 可以看黄的视频 | 天天操夜夜操 | 欧美一区二区三区免费在线观看 | 91大神在线看 | 国产精品夜夜夜一区二区三区尤 | 99精品久久 | 99精品99久久久久久宅男 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 看片国产| 人人九九精 | 国产精品色 | 欧美色欧美亚洲另类七区 | 日韩一区二区福利视频 | 中文字幕 在线观看 | 人人鲁人人莫人人爱精品 | 国产做a爱片久久毛片 | 日韩精品在线观看一区二区 | 日韩a在线| 日本一区二区高清不卡 | 婷婷久久精品一区二区 | 国产成人啪免费观看软件 | 国产精品高清在线 | av毛片 | 欧美日韩一 | 欧美性受xxxx | 欧美日韩国产一区二区三区不卡 | 久久综合一区二区 |