跳至內容

讀取-求值-輸出循環

出自Taiwan Tongues 客語維基
於 2025年8月23日 (六) 15:52 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

「讀取 - 求值 - 輸出」循環(英語:Read-Eval-Print Loop,簡稱REPL), 乜分人喊做交互式頂層構件(英語:interactive toplevel), 係一個簡單个,交互式个編程環境。這隻詞輒常用於指代一隻 Lisp 个交互式開發環境,也做得指代命令行个模式。

==概述==_「讀入 - 求值 - 輸出」循環 _ 个名仔來自於以下幾个 Lisp 用來實現這種機制个內置函數:

  • 讀入函數接收一個來自用戶个表達式,摎佢兜解析个成資料結構還過貯入記憶體。比將講, 用戶可能會輸入一個 s - 表達式 ` ( + 一二三 ) `,這句話會分人解析做一隻包含四隻元素个鍊表。
  • 求值函數負責處理內部个資料結構並對佢个求值。在 Lisp 中,求一個用函幾下儕開頭个 s-表達式意思係講著續下來个參數調用該隻函數。故所函數 " ` + ` " 分人在參數 ` 一二三 ` 上調用,產生結果 ` 六 `。
  • 輸出函數接受求值結果,摎佢呈現个給用戶。做你來做前个結果啊「` 六 `」並無具有複雜个格式,毋過係講係一個較複雜个表達式,恁呢佢會分精心處理,好來利便分人理解。

REPL 使得探索性个編程還有調試更加利便,因為「讀取 - 求值- 輸出」循環一般會比經典个「編輯 - 編譯 - 運行 - 調試」模式愛還較遽。

優點

REPL 對學習一門新个程式語言有當大个幫助,因為佢做得跈等對初學者做出回應。許當多工具集摎程式語言使用 REPL 研究算法、進行調試,比論講 MATLAB,ROOT,SciPy 摎 IPython。Python 个 doctest 模塊做得通過捉著自家个身體 REPL命令行个輸出分測試代碼過較容易進行。

因為 ` print ` 函數輸出个數據格式(字符串)同用戶个輸入个數據格式(字符串)共樣,大多數輸出去个結果也做得分人帶歸去吔 ` read ` 函數作為輸入。毋過,有成時輸出來个結果淨做得代表求值結果毋係求值結果本身,比將講一個 socket 句柄抑係一兜類个實例。比將講在 Python 當中使用 ` < _ _ 模擬名 _ _ . 種草種有一千五百五十二儕 > `這種形式來代表一個實例本身,在 Common Lisp 當中就使用 ` # < whatever > ` 个形式嗬。啊在 CLIM,SLIME 還有 Symbolics Lisp Machine 个 REPL 嗄有辦法讀取當難分完全字符串化个這兜對象。佢兜記錄分人輸出過个對象,後當代碼分人讀書个時節,這兜對象做得分人解析還過重新被使用。

實現

為著愛實現一個 LispREPL,淨需要實現這三個函數摎一個不停輪詢个函數就做得(當然啊,求值函數个實現係最複雜个,因為佢在內部愛實現像 ` car ` 摎 ` + ` 个原始函數還過像 ` if ` 共樣个特殊操作符)。這兜事頭做核吔過後,一個基本个 REPL 就做得用像下个簡單形式表達:` ( loop ( print ( eval ( read ) ) ) ) `。

一種實現 ` eval ` 个方式就係實現一嗬每一個遞歸處理抽象語法樹(這種話法樹分 ` read ` 函數創建)个函數。另外一種方法係摎這抽象語法樹編譯做機器碼還過執行。

主要 REPL 程式語言環境

APL、BASIC、Clojure、F #、Haskell、J、Julia、Perl、PHP、Prolog、Python、R、Ruby、Scala、Smalltalk、Standard ML、Swift、Tcl、Javascript、Java ( 版本 jdk 有九件 )

外部連結