2016-04-30 59 views
0

我做了一些功課,我對一些事情感到困惑關於口齒不清Lisp的類型系統故障

問:

考慮Lisp的語句:

(eval (read-from-string (read-line))) 

非常簡要描述的特徵Lisp的類型系統需要支持這種類型的語句。

思考

我很新爲Lisp所以我對如何甚至接近問題不確定。 我知道類型系統基本上就是它的工作原理以及它可以做什麼的語言規則。我只是不知道如何用這一行代碼來描述Lisp的功能。

+0

你說的是什麼執行力度? – coredump

+0

@coredump我不相信我被告知某個實現。 – Justin

+1

我不認爲你可以根據這麼少的信息對類型系統進行任何說明。例如。 Haskell具有靜態類型,類似的代碼很容易看起來相同,因爲鍵入也可以被推斷出來。 – Sylwester

回答

1

由於這是一個家庭作業問題,我不會爲你回答。相反,我試圖幫助你問自己正確的問題。

每當在一個問題中有一個概念,你還不知道或不明白,那麼你應該嘗試首先了解

我明白類型系統基本上是它如何工作的語言規則以及它可以做什麼。

回過頭想一想什麼這句話講的是你對「類型系統」的理解。 你知道類型系統是什麼嗎?我不這麼認爲。 你瞭解類型系統的目的嗎?我不這麼認爲。

因此,首先嚐試回答這些問題。 (這是一個快速跳轉到維基百科)爲了驗證你的理解,嘗試回答這些問題:

  • 什麼是動態和靜態類型之間的區別?
  • 強弱鍵入有什麼區別?
  • 如果42有型Integer,有些功能foo需要Integer類型的單一參數並返回一個String,什麼是表達​​(調用函數)的類型?
  • 如果"OMG"有型String,有些功能foo需要Integer類型的單一參數並返回一個String,什麼是表達(foo "OMG")的類型?

嘗試回答最後兩個問題,不僅對於Lisp,還對其他一些語言(如Java,C,C++,Haskell;調整當然的調用語法)回答最後兩個問題。

現在,再想想(保持到Common Lisp的eval這裏)的類型:

(eval '(+ 1 2)) 

最後,是什麼類型:

(eval (read)) 
+0

因此,從進一步的研究Lisp是強類型和動態的,正確的?這是因爲變量是在運行時解釋的,也是因爲你必須根據你在做什麼來翻譯字符串和數字。所以,看看:**(eval(read-from-string(read-line)))**,我們可以說它是強類型的,因爲我們使用**從字符串中讀取**和** eval **顯示我們在運行時解釋變量。這看起來是正確的嗎? – Justin