當前位置:編程學習大全網 - 編程語言 - 為什麽主函數和中斷函數不能調用同壹函數

為什麽主函數和中斷函數不能調用同壹函數

中斷服務函數ISR不被任何函數調用,ISR和main可以看作是並行發生的。

函數式編程:

函數式編程是種編程典範,它將電腦運算視為函數的計算。函數編程語言最重要的基礎是 λ 演算(lambda calculus)。而且λ演算的函數可以接受函數當作輸入(參數)和輸出(返回值)。和指令式編程相比,函數式編程強調函數的計算比指令的執行重要。和過程化編程相比,函數式編程裏,函數的計算可隨時調用。

在經常被引用的論文 “Why Functional Programming Matters”(請參閱 參考資料) 中,作者 John Hughes 說明了模塊化是成功編程的關鍵,而函數編程可以極大地改進模塊化。在函數編程中,編程人員有壹個天然框架用來開發更小的、更簡單的和更壹般化的模塊, 然後將它們組合在壹起。函數編程的壹些基本特點包括:

支持閉包和高階函數,支持惰性計算(lazy evaluation)。使用遞歸作為控制流程的機制。加強了引用透明性。沒有副作用。我將重點放在在 Java 語言中使用閉包和高階函數上,但是首先對上面列出的所有特點做壹個概述。

閉包和高階函數:

函數編程支持函數作為第壹類對象,有時稱為 閉包或者 仿函數(functor)對象。實質上,閉包是起函數的作用並可以像對象壹樣操作的對象。與此類似,FP 語言支持 高階函數。高階函數可以用另壹個函數(間接地,用壹個表達式) 作為其輸入參數,在某些情況下,它甚至返回壹個函數作為其輸出參數。這兩種結構結合在壹起使得可以用優雅的方式進行模塊化編程,這是使用 FP 的最大好處。

惰性計算:

除了高階函數和仿函數(或閉包)的概念,FP 還引入了惰性計算的概念。在惰性計算中,表達式不是在綁定到變量時立即計算,而是在求值程序需要產生表達式的值時進行計算。延遲的計算使您可以編寫可能潛在地生成無窮輸出的函數。因為不會計算多於程序的其余部分所需要的值,所以不需要擔心由無窮計算所導致的 out-of-memory 錯誤。壹個惰性計算的例子是生成無窮 Fibonacci 列表的函數,但是對 第 n 個Fibonacci 數的計算相當於只是從可能的無窮列表中提取壹項。

遞歸:

FP 還有壹個特點是用遞歸做為控制流程的機制。例如,Lisp 處理的列表定義為在頭元素後面有子列表,這種表示法使得它自己自然地對更小的子列表不斷遞歸。

引用透明性:

函數程序通常還加強引用透明性,即如果提供同樣的輸入,那麽函數總是返回同樣的結果。就是說,表達式的值不依賴於可以改變值的全局狀態。這使您可以從形式上推斷程序行為,因為表達式的意義只取決於其子表達式而不是計算順序或者其他表達式的副作用。這有助於驗證正確性、簡化算法,甚至有助於找出優化它的方法。

副作用:

副作用是修改系統狀態的語言結構。因為 FP 語言不包含任何賦值語句,變量值壹旦被指派就永遠不會改變。而且,調用函數只會計算出結果 ── 不會出現其他效果。因此,FP 語言沒有副作用

  • 上一篇:平面設計自我鑒定
  • 下一篇:單片機程序註釋
  • copyright 2024編程學習大全網