我是新來的方案和做一些練習。我正在嘗試執行以下操作: 我要寫的函數帶有一個列表參數(不需要輸入檢查)。然後它會消除多個元素的出現並返回新列表。下面是一個例子輸入輸出:讓我們調用函數「一次」,如何在方案中編寫以下功能
=>(once '(1 2 5 2 3 4 2 4 1 2))
=>Value: (1 2 5 3 4)
這裏是我的解決方案:
(define once
(lambda (lst)
(if (null? lst)
'()
(if (member (car lst) (cdr lst))
(once (cdr lst))
(cons (car lst) (once (cdr lst)))))))
但元素的順序被改變雖然消除重複。誰能幫忙? 感謝
這是一個內置函數嗎?謝謝,但我試圖自己寫。 – yrazlik 2013-05-03 22:05:31
@bigO是的,它內置在球拍中。如果您需要自己實現它,則很簡單:遍歷列表,詢問當前元素是否是列表中其餘部分的「成員」。如果它是成員,則繼續使用列表的cdr(它是重複的)。如果它不是一個成員,那就說它(它不是重複的)。無論哪種方式,推進遞歸 – 2013-05-03 22:14:16
@bigO我更新了一些提示我的答案 – 2013-05-03 22:18:04