日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Pyret編程語(yǔ)言:探索腳本語(yǔ)言和函數(shù)式編程的融合

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

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比榆中網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式榆中網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋榆中地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

Pyret 語(yǔ)法介紹

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

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

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

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

Pyret 的測(cè)試是編程過(guò)程的自然組成部分。函數(shù)可以在where:子句中結(jié)束,該子句為函數(shù)提供了單元測(cè)試,并且這些斷言 (Assertions) 會(huì)被動(dòng)態(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

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

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

亮點(diǎn)

注解 (Annotations)

與大多數(shù)腳本編程語(yǔ)言不一樣,Pyret 支持開(kāi)箱即用地檢查參數(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. # With type checker on:
  9. # Number is incompatible with String

支持長(zhǎng)度較長(zhǎng)的數(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 為編寫(xiě)數(shù)據(jù)定義提供了優(yōu)雅的機(jī)制,而無(wú)需開(kāi)發(fā)者具備對(duì)類的認(rèn)知背景,以及語(yǔ)法開(kāi)銷。

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ù)方面也非常靈活,并在其底層公開(kāi)了一個(gè)簡(jiǎn)單的對(duì)象模式,支持結(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. let name_of_animal a =
  7.   match a with
  8.     | Elephant(name, _)
  9.     | Tiger(name, _)
  10.     | Horse(name, _) -> name
  11.     ...

Pyret

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

Racket

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

Pyret

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

運(yùn)行 Pyret

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

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

 
 
 
 
  1. npm install -g pyret-npm

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

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

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

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

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

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


網(wǎng)頁(yè)題目:Pyret編程語(yǔ)言:探索腳本語(yǔ)言和函數(shù)式編程的融合
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/ccsjhis.html