【PL理論深化】(13) 變量與環境:文法結構 | 真假表達式:isZero E | let 表達式疊放 | 定義的規則 | 條件語句的使用

💬?寫在前面:從現在開始,讓我們正式設計和實現編程語言。首先,讓我們擴展在之前定義的整數表達式語言,以便可以使用變量和條件表達式。

目錄

0x00 文法結構

0x01 真假表達式:isZero E

0x02 let 表達式疊放

0x03 定義的規則

0x04 條件語句的使用


0x00 文法結構

擴展后的語言的文法結構如下,在整數表達式語言中增加了四種文法:

在程序中,可以在任意可以出現表達式的位置使用變量 x?(隨機變量)

let x?= E_1 in?E_2 是一個聲明變量 x?的表達式。

它先將 E_1?的值賦給 x,然后計算 E_2?的值。在此期間,變量 x?的有效范圍是 E_2

if E_1?then E_2?else?E_3? 是一個條件表達式,其計算方式如下。

.

此后,我們約定符號?\top?表示?true,符號?\bot?表示 false。

首先計算表達式 E_1,其結果必須是 \perp?或 \top

  • 如果 E_1?的值是 \top,則計算 E_2
  • 如果 E_1?的值是 \bot,則計算 E_1

0x01 真假表達式:isZero E

為了使用條件表達式,需要創建產生 真/假 的表達式,因此我們添加了語法:

\textrm{iszero}\,\, E

它計算表達式 E?的值,如果值為 0,則計算為 \top,否則為 \bot

由于它類似于 OCaml 的語法,可以很容易感受到可以編寫哪些程序,舉幾個例子:

下面是一個程序,首先變量 x:= 1,然后計算?x+2 的值,結果是 3

let x = 1 in x + 2

0x02 let 表達式疊放

在 let 表達式的?E_2 位置上可以放置另一個 let 表達式

let x = 1
in let y = 2in x + y

表達式 x+y?中,x?和 y?分別代表 1 和 2,因此程序的計算結果是 3。

.

也可以在 let?表達式的?E_1 位置上放置另一個 let?表達式,如下所示。

let x = let y = 2in y + 1
in x + 3

表達式 let y = 2 in y + 1?的值為 3,將其命名為 x?后,計算表達式?x+3 的結果為 6。

在計算表達式?x+3 時,請注意變量 y?不可用。

變量 y?的作用范圍僅限于表達式 y+1,因此在其他地方無法使用。

因此,下面的程序在語法上沒有問題,但在執行時會出現問題。

let x = let y = 2in y + 1
in x + y

0x03 定義的規則

可以多次使用相同的名稱進行定義,如下所示。

let x = 1
in let y = 2in let x = 3in x + y

在最后一行計算 x+y?時,x?表示最后定義的值 3,因此?x+y 的值是 5。

重新定義具有相同名稱的變量并不會改變先前變量的值。

使用 let 定義變量并不是修改現有變量的值,而是創建一個新名稱,在其作用域內具有意義。

例如下面的程序:

let x = 1
in let y = let x = 2in x + xin x + y

上述程序計算的結果是 5。第一行定義變量 x:= 1,第二行定義的 x:= 2

因此第三行的?x+x 的值是 4,因此變量 y?的值為 4。

在最后一行的表達式?x+y 中,變量 x?指的是第一行定義的 x,因此?x+y 的值為 5。

0x04 條件語句的使用

條件語句的使用如下所示。這是一個計算整數 1 的程序。

let x = 1
in let y = 2in if iszero (x - 1) then y - 1 else y + 1

.

現在,由于程序不僅可以計算整數,還可以計算真 / 假值,因此存在一些由于類型不匹配而無法執行的程序,即存在 類型錯誤 (type error) 的程序。例如,看下面的程序。

let x = 1
in let y = iszero xin x + y

加法是針對兩個整數定義的操作,但由于?y\in \left \langle bool \right \rangle,因此在計算?x+y 時會發生類型錯誤。

由于我們的語言目前沒有靜態類型系統,所以無法在執行前發現這類類型錯誤。

如果在運行過程中發生類型錯誤,程序將會因此而非正常終止。

📌 [ 筆者 ]? ?王亦優
📃 [ 更新 ]? ?2022.9.14
? [ 勘誤 ]?? /* 暫無 */
📜 [ 聲明 ]? ?由于作者水平有限,本文有錯誤和不準確之處在所難免,本人也很想知道這些錯誤,懇望讀者批評指正!

📜 參考資料?

- R. Neapolitan, Foundations of Algorithms (5th ed.), Jones & Bartlett, 2015.

- T. Cormen《算法導論》(第三版),麻省理工學院出版社,2009年。

- T. Roughgarden, Algorithms Illuminated, Part 1~3, Soundlikeyourself Publishing, 2018.

- J. Kleinberg&E. Tardos, Algorithm Design, Addison Wesley, 2005.

- R. Sedgewick&K. Wayne,《算法》(第四版),Addison-Wesley,2011

- S. Dasgupta,《算法》,McGraw-Hill教育出版社,2006。

- S. Baase&A. Van Gelder, Computer Algorithms: 設計與分析簡介》,Addison Wesley,2000。

- E. Horowitz,《C語言中的數據結構基礎》,計算機科學出版社,1993

- S. Skiena, The Algorithm Design Manual (2nd ed.), Springer, 2008.

- A. Aho, J. Hopcroft, and J. Ullman, Design and Analysis of Algorithms, Addison-Wesley, 1974.

- M. Weiss, Data Structure and Algorithm Analysis in C (2nd ed.), Pearson, 1997.

- A. Levitin, Introduction to the Design and Analysis of Algorithms, Addison Wesley, 2003. - A. Aho, J. Hopcroft, and J. Ullman, Data Structures and Algorithms, Addison-Wesley, 1983.

- E. Horowitz, S. Sahni and S. Rajasekaran, Computer Algorithms/C++, Computer Science Press, 1997.

- R. Sedgewick, Algorithms in C: 第1-4部分(第三版),Addison-Wesley,1998

- R. Sedgewick,《C語言中的算法》。第5部分(第3版),Addison-Wesley,2002

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37251.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch 第四期:搜索和過濾

序 2024年4月,小組計算建設標簽平臺,使用ES等工具建了一個demo,由于領導變動關系,項目基本夭折。其實這兩年也陸陸續續接觸和使用過ES,兩年前也看過ES的官網,當時剛畢業半年多,由于歷史局限性導…

Java有沒有goto語句

一、技術細節 Java作為一種廣泛使用的編程語言,其設計哲學強調清晰、簡潔和易于維護。在技術細節層面,Java確實支持goto語句作為關鍵字,但在實際編程中,goto語句并不被推薦使用。Java中的goto是保留字,主要用于兩個場…

chrome-base源碼分析(1)macros模塊

Chrome-base源碼分析(2)之Macros模塊 Author:Once Day Date:2024年6月29日 漫漫長路,才剛剛開始… 全系列文章請查看專欄: 源碼分析_Once-Day的博客-CSDN博客 參考文檔: macros - Chromium Code SearchChrome base 庫詳解:工…

安全架構概述_2.安全架構的定義和范圍

安全架構是架構面向安全性方向上的一種細分,比如細分領域含有運維架構、數據庫架構等。如果安全性體現在產品上,那么,通常的產品安全架構、安全技術體系架構和審計架構可組成三道防線。 (1)產品安全架構:構…

ArtTS系統能力-通知的學習(3.1)

上篇回顧: ArtTS語言基礎類庫-容器類庫內容的學習(2.10.2) 本篇內容: ArtTS系統能力-通知的學習(3.1) 一、 知識儲備 1. 基礎類型通知 按內容分成四類: 類型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

2024 Parallels Desktop for Mac 功能介紹

Parallels Desktop的簡介 Parallels Desktop是一款由Parallels公司開發的桌面虛擬化軟件,它允許用戶在Mac上運行Windows和其他操作系統。通過強大的技術支持,用戶無需重新啟動電腦即可在Mac上運行Windows應用程序,實現了真正的無縫切換。 二…

普元EOS學習筆記-創建精簡應用

前言 本文依舊基于EOS8.3進行描述。 在上一篇文章《EOS8.3精簡版安裝》中,我們了解到普元預編譯好的EOS的精簡版壓縮包,安裝后,只能進行低開,而無法高開。 EOS精簡版的高開方式是使用EOS開發工具提供的IDE,創建一個…

東軟睿馳總裁兼CTO杜強受邀出席 CICV 2024智能網聯汽車技術首腦(CTO)閉門峰會

近日,第十一屆國際智能網聯汽車技術年會(CICV 2024)在北京舉辦,會議期間組織智能網聯汽車技術首腦(CTO)閉門峰會,邀請40余位技術領袖圍繞智能網聯汽車產業生態建設以及智能網聯汽車數據、算力和…

SQL語句查詢Cache數據庫中數據時對時間怎樣轉換

使用東華醫為HIS系統的用戶都知道,Cache數據庫中對于日期的存儲為幾萬的數字,比如,今天就是相對于1841年1月1日的第多少萬天,以這種形式進行表示;對于時間,也是以數字形式存儲,比如,…

Python的numpy簡單使用

1.可以調用引入numpy里面的函數,如add可以把倆數相加,也可以創建一個數組arr,arr.shape是數組arr的屬性,如果后有跟()就是里面的一個函數 type()函數可以知道里面是什么類型 變量.shape可以知道這個變量是…

BLEU和SPICE:機器翻譯與圖像描述的自動評估方法詳解

BLEU和SPICE:機器翻譯與圖像描述的自動評估方法詳解 在機器翻譯和圖像描述領域,評估模型性能是一個重要且復雜的問題。為了有效地評估機器生成的文本質量,我們需要一種自動、快速且可靠的方法。BLEU(Bilingual Evaluation Unders…

基于決策樹的旋轉機械故障診斷(Python)

前置文章: 將一維機械振動信號構造為訓練集和測試集(Python) https://mp.weixin.qq.com/s/DTKjBo6_WAQ7bUPZEdB1TA 旋轉機械振動信號特征提取(Python) https://mp.weixin.qq.com/s/VwvzTzE-pacxqb9rs8hEVw import…

菲爾茲獎得主測試GPT-4o,經典過河難題未能破解!最強Claude 3.5回答離譜!

目錄 01 大言模型能否解決「狼-山羊-卷心菜」經典過河難題? 02 加大難度:100只雞、1000只雞如何? 01 大言模型能否解決「狼-山羊-卷心菜」經典過河難題? 最近,菲爾茲獎得主Timothy Gowers分享了他測試GPT-4o的經歷&a…

游戲推薦: 植物大戰僵尸雜交版

下載地址網上一搜就有. 安裝就能玩. 2是顯血. 4顯示植物血, 5是加速. 都是左手主鍵盤的按鈕, 再按是取消. 比較刺激: ps: 設置里面還能打開自動收集陽光和金幣.

視頻融合共享平臺LntonCVS統一視頻接入平臺智慧安防應用方案

安防視頻監控平臺LntonCVS是一款擁有強大拓展性和靈活部署能力的綜合管理平臺。它支持多種主流標準協議,包括國標GB28181、RTSP/Onvif、RTMP等,同時兼容各廠家的私有協議和SDK,如海康Ehome、海大宇等。LntonCVS不僅具備傳統安防視頻監控功能&…

深入解析Tomcat:Java Web服務器(上)

深入解析Tomcat:Java Web服務器(上) Apache Tomcat是一個開源的Java Web服務器和Servlet容器,用于運行Java Servlets和JavaServer Pages (JSP)。Tomcat在Java Web應用開發中扮演著重要角色。本文將詳細介紹Tomcat的基本概念、安裝…

遙遠星辰中的覺醒:超大質量黑洞的蘇醒

遙遠星辰中的覺醒:超大質量黑洞的蘇醒 在浩渺無垠的宇宙中,星辰的閃爍仿佛是時間的漣漪,穿越億萬年的距離,抵達我們的眼眸。而在這片星辰大海的深處,一個驚人的現象正在悄然上演——距離地球3.6億光年之遙的星系中&am…

【C++】空指針訪問成員函數

空指針訪問成員函數 C中空指針也是可以調用成員函數的,但是也要注意有沒有用到this指針 如果用到this指針,需要加以判斷保證代碼的健壯性 class Animal { public:void fun1() {//正常的成員函數}void fun2() {if (this NULL) {return;//如果沒有這個…

Django 一對一關系

作用: 兩個數據庫表建立外鍵關系當外鍵表的數據被刪除時,主表的數據也會一并刪除。 1,添加表模型 Test/app8/views.pyfrom django.db import modelsclass User(models.Model):username models.CharField(max_length50, uniqueTrue)email …

【代碼隨想錄訓練營】【Day 65】【圖論-2】| 卡碼 99

【代碼隨想錄訓練營】【Day 65】【圖論-2】| 卡碼 99 需強化知識點 深度搜索和廣度搜索 題目 99. 島嶼數量 思想:遍歷到為1的節點,再搜索標記,每遇到新的陸地節點,增加計數 深度搜索廣度搜索:此處用 [] 作為待遍…