2015-10-31 56 views
-1

我知道cons是用於建設配對,如(cons 2 (cons 3 empty)),但我不明白這裏的代碼empty後使用cons。是不是cons爲數字建造? cons如何獲取2個參數?如果他們可以接受2個參數,它是如何評估它們的?請有人請[(empty? lst) empty]之後翻譯代碼。使用利弊在球拍/計劃的參數

(define (removed2 lst) 
    (cond 
     [(empty? lst) empty] 
     [(not (member? (first lst) (rest lst))) 
     (cons (first lst) (removed2 (rest lst)))] 
     [else (removed2 (rest lst))]) 
+0

看看https://www.shido.info/lisp/scheme3_e。HTML – uselpa

+0

你應該花一些時間閱讀[文件](http://docs.racket-lang.org/reference/pairs.html)和良好的[圖書](https://mitpress.mit.edu/sicp/全文/書/ book-ZH-15.html#%_ sec_2.2),我確定你的課本包括解釋所有你的問題。 –

+0

謝謝大家,這些書幫助了很多 –

回答

2

我建議你閱讀一本好書或計劃的教程,你問的一些最基本的概念的解釋,應該開始進行編碼方案之前,很好理解。例如,這個chapter是一個很好的起點。我會解決您的問題:

我知道cons是建築對,像(cons 2 (cons 3 empty))

事實上,你可以建立你想...數對,對對什麼的對,你的名字。

但我不明白在這裏使用cons代碼empty後。

在這種情況下,empty表示空列表'()。因此,我們可以建立一個對,其中第一個元素是原子(在這種情況下的數字),第二個是空列表 - 這就是我們如何建立適當的方案列表!

是不是cons爲數字?

不,它是建立對什麼,包括其他對。

cons如何獲取2個參數?如果他們可以接受2個參數,它是如何評估它們的?

爲什麼不呢?正如你已經指出,cons是構建。一對由兩部分組成,因此cons需要2個參數。它依次對它們進行評估,然後將它們粘在一起形成一對。你真的應該真的讀到documentation

而且可以有人請翻譯後的代碼[(empty? lst) empty]

這只是問我們是否遞歸遍歷列表爲空,如果是,則返回一個空列表 - 基本情況任何返回列表的遞歸過程。該過程簡單地建立一個列表作爲結果,因爲這是cons ING元素對,和最後一對與一個空列表結束時,產生適當的列表。基本上,這是你如何在Scheme中建立一個列表:

(cons 1 (cons 2 (cons 3 empty))) 
=> '(1 2 3)