之間我一直在試圖使球拍的功能則計爲(MakeList a b)
,然後顯示,使得(a, a+1, a+2, ..., b)
列表。我一直在嘗試,但找到了一些關於如何創建列表然後添加到列表的東西,但是已經提供了很少有用的信息。有關如何創建此功能的任何幫助將非常棒。如何使計數列表球拍兩個變量
1
A
回答
1
我理解,這是很可能一個家庭作業問題的更多。正如@AlexisKing指出的那樣,range
函數已經存在。但是,如果你堅持自己寫這個,我想提供一些幫助。球拍是一種非常有趣的語言,我不希望你感到灰心。
尋找光明的一面,這聽起來像你大多知道你需要做的
(a, a+1, a+2, ..., b)
所以與
(define (make-list a b)
(cons a ...))
什麼是...
這裏壽開始?以及你在你的預期輸出表示,...
將
(a+1 ... b)
所以(a+1 ... b)
是a+1
到b
列表 - 或者換句話說:(make-list (add1 a) b)
很好,很容易。讓我們來填寫吧。
(define (make-list a b)
(cons a (make-list (add1 a) b)))
但是等等,這應該會讓你震驚。爲什麼?因爲我們只是永遠...
(cons a (cons a+1 (cons a+2 (cons a+3 ... (cons a+Infinity ...)))))
我們必須告訴我們的程序停止在某個時候,對吧?但是什麼時候該停止?
讓我們寫了一個小真值表來幫助我們。我們的表表達式將被(make-list 0 4)
a b previous stop?
0 4 N/A no
1 4 (0 ...) no
2 4 (0 1 ...) no
3 4 (0 1 2 ...) no
4 4 (0 1 2 3 ...) no
5 4 (0 1 2 3 4 ...) yes – (0 1 2 3 4) is the value we'd like
好了,這使得它非常清楚。當a
是大於b
時,我們可以完成製作我們的清單。請記住,以表示一個列表的末尾,我們使用的空單,empty
(define (make-list a b)
(if (> a b)
empty
(cons a (make-list (add1 a) b))))
檢查它
(make-list 0 4) ;=> '(0 1 2 3 4)
(make-list 2 6) ;=> '(2 3 4 5 6)
(make-list 3 3) ;=> '(3)
(make-list 6 3) ;=> '()
2
下面是一個簡單&有效的方式做任何計劃或Lisp實現:
(define (makelist a b)
(do ((i b (- i 1))
(lst '() (cons i lst)))
((< i a) lst)))
它從一個空列表開始,增加了b
,在前面加上較小的那個,並在返回結果後返回a
。
1
球拍的對/列表功能還可以被使用如下:
(define (make-list a b)
(for/list ((i (in-naturals))
#:break (> i b)
#:when (and (>= i a) (<= i b)))
i))
(make-list 5 10)
輸出:
'(5 6 7 8 9 10)
但是a和b必須是> = 0
1
下面的循環可以也可用於創建這樣的清單:
(define (ml a b)
(let loop ((a a) (lst '()))
(if (> a b)
(reverse lst)
(loop (add1 a) (cons a lst)))))
(ml 5 10)
輸出:
'(5 6 7 8 9 10)
相關問題
- 1. 在列表球拍中計數數字
- 2. 使用球拍附加到列表變量
- 3. 球拍遞歸變量? 。
- 4. 計算球拍中的一個系列
- 5. 你如何在球拍中創建一個簡單的變量?
- 6. 球拍,在給定數量的列表中分割一個列表
- 7. 減去球拍中的數字列表
- 8. 球拍,在兩個不同尺寸的列表
- 9. 如何使用幀計數器使球拍圖像閃爍?
- 10. 使用會員的球拍列表
- 11. 如何將2個列表合併到一個球拍中
- 12. 球拍計劃重新定義常量
- 13. 計數SPSS使數值變量列表
- 14. 創建球拍累加器「變量」
- 15. 評估球拍反應變量/ xexpr
- 16. 計劃/球拍:預期的變量,但發現
- 17. 你如何在球拍中創建一個空的可變列表?
- 18. 兩個關於球拍宏觀
- 19. 如何替換變量值利弊細胞內部球拍
- 20. 如何將變量傳遞給「文本」球拍
- 21. 球拍:使用兩種條件進行篩選(將列轉爲列表)
- 22. 球拍,將列表轉換爲值
- 23. 球拍/方案列表操作
- 24. 在球拍中創建列表
- 25. 球拍附加列表的複雜性
- 26. 在球拍中循環播放列表
- 27. 利弊,列表和mpair球拍
- 28. 刪除球拍列表中的括號
- 29. 與foldr相似列表操作球拍
- 30. 在球拍中迭代通過列表
你要找的功能是['range'](http://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib ._racket%2Flist..rkt%29._range%29%29)from'racket/list'。如果你必須自己實現它,這聽起來像作業。 –
你試過了什麼,得到了什麼錯誤? – nyedidikeke