本節書摘來自異步社群《haskell函數式程式設計入門》一書中的第1章,第1.3節ghci的使用,作者 張淞,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
1.3 ghci的使用
ghci是一個對函數進行測試與調式的工具,可以導入haskell源代碼檔案,然後調用其中的函數、檢視函數的資訊等。本節先學習如何使用ghci中的指令來對檔案和庫進行導入等,再來了解如何在ghci中調用函數。
啟動ghci後可以看到ghci的版本,還有導入的庫等,可以不用管它們,最後一行會有一個prelude>提示符,其中prelude指的是ghci在運作時一個預設的初始環境。它是一個定義了很多類型與函數的庫。啟動ghci後,使用者可以不做任何設定而直接使用其中定義的内容。下面來看一下ghci中的一些指令。
1.3.1 ghci中的指令
下面介紹一些常用的ghci指令,學習如何導入代碼檔案和庫子產品,以及如何改變ghci的目前路徑等。
:load:簡寫為:l,用來導入目前路徑或者指定路徑下的檔案,但在windows下要注意使用轉義的反斜杠。比如,導入作者桌面上hellowrold檔案夾下的helloworld.hs,winghci的使用者可以直接使用打開按鈕來打開程式檔案。
:reload:簡寫為:r,用來重新導入目前的源代碼檔案。通常,在儲存了源檔案後,ghci不會自動重新導入修改後的檔案,使用者可以很友善地使用:r來重新導入。winghci的使用者可以使用重新整理按鈕來重新導入程式檔案。
:cd:改變目前ghci的路徑。這樣做就不用每一次都輸入絕對路徑來導入檔案了。例如:
<code>prelude>:cd c:\users\user\desktop</code>
:module:導入一個庫,簡寫為:m。使用:m +與:m – 來增加與移除不同的子產品。在後面會具體介紹如何使用這個指令。
:quit:退出ghci。
:?:可以讓ghci輸出幫助資訊。
當然,ghci的指令還有很多,本書将在後面的章節再做介紹。這裡約定:若沒有特别說明,則ghci指的就是winghci,而不是指令行的下的ghci。
1.3.2 在ghci中調用函數
很多數值比如整數、小數還有一些四則運算的函數都已經在上節中提過的prelude初始環境中定義好了,是以可以直接使用。由于在prelude中定義了各種數學運算符号,是以ghci可以當做一個電腦來使用。比如:
除了邏輯與運算&&外,prelude中還提供了邏輯或運算符||,使用者可以在ghci中測試這個函數。
prelude中還提供非常實用的容器—清單。有了它就可以很靈活地對值進行存儲和使用相關的函數。[1..4]表示周遊整數1~4,即[1,2,3,4]。
[1..4] [1,2,3,4]
sum是一個可以對清單中的數值進行求和的函數。也就是說,給定一個清單sum,會求得該清單中所有元素的和。比如:
sum [1..4]
10
prelude中的product函數可以求得一個清單的所有元素的乘積,讀者可以在ghci中計算[1..4]的乘積。
如果想引用之前調用的函數所計算的結果,可以使用it。比如,計算了1~4之間的整數之和後想再加100可以寫為:
it + 100
110
因為it在ghci中可以指代前一次函數計算的結果,是以在定義函數還有測試時不要使用it作為函數或者變量的名稱。
最後,約定如下:如果書中隻用>符号,然後調用函數或者輸入ghci指令,則表示在ghci的提示符中的操作,而c:>則是系統指令行的提示符。