我將如何在計劃中循環此列表?計劃通過列表循環
(define test-document '(
((h e l l o))
((t h i s)(i s)(t e s t))
))
我試過它只顯示第一列。
我將如何在計劃中循環此列表?計劃通過列表循環
(define test-document '(
((h e l l o))
((t h i s)(i s)(t e s t))
))
我試過它只顯示第一列。
你有什麼是列表的列表清單:
(define test-document '(((h e l l o)) ((t h i s) (i s) (t e s t))))
要遍歷所有的元素,你必須創建一個循環的循環的循環。要做到這一點,我們可以使用map
和curry
如下:
(map (curry map (curry map
(compose string->symbol string-upcase symbol->string)))
test-document)
這將產生以下的輸出:
(((H E L L O)) ((T H I S) (I S) (T E S T)))
如果您Scheme解釋沒有內置curry
功能,那麼你可以定義一個如下:
(define (curry func . args)
(lambda x (apply func (append args x))))
希望這有助於。
它說咖喱未定義 –
您使用哪種方案解釋器? 'curry'函數在'mzscheme'中可用。無論如何,我更新了我的答案「咖喱」的實現。 –
car
和cdr
功能家族是您的朋友導航列表。這裏有些例子。
(define test-document '(
((h e l l o))
((t h i s)(i s)(t e s t))
))
(car test-document) ;; `((h e l l o))
(caar test-document) ;; `(h e l l o)
(cadr test-document) ;; `((t h i s) (i s) (t e s t))
(car (cadr test-document) ;; `(t h i s)
(cadr (cadr test-document) ;; `(i s)
(caddr (cadr test-document) ;; `(test)
定義一個函數,它將遍歷列表併爲每個不是列表的項目調用一個函數。
(define (walk-list lst fun)
(if (not (list? lst))
(fun lst)
(if (not (null? lst))
(begin
(walk-list (car lst) fun)
(walk-list (cdr lst) fun)))))
叫它打印每個項目。
(walk-list test-document print)
但是如果你不知道文檔的大小。 –
@PhilipRego我在回答中增加了一些內容,以說明如何走一個列表並對其中的項目做些什麼。 –
如何讓它不打印字樣地打印單詞。它得到的話作爲一個列表,但我不能做任何事情,因爲它有他們周圍的愚蠢的遺忘 (定義(散步列表樂趣) (如果(不(等於?(汽車1st)'())) (fun lst) (if(not(null?(walk-list(car lst)fun) (walk-list(cdr lst)fun)))) (walk-list test-document display) –
你是否在想這樣的事情?
(define (walk-list lst)
(define (sub-walk lst)
(if (null? lst)
'()
(let ((x (car lst)))
(if (list? x)
(cons (sub-walk x) (sub-walk (cdr lst)))
(apply string-append (map symbol->string lst))))))
(flatten (sub-walk lst)))
然後
(walk-list test-document)
=> '("hello" "this" "is" "test")
,您可以使用通常的嫌疑人過程(map
,filter
,...)。
如果你的計劃沒有flatten
過程中,您可以使用此一:
(define (flatten lst)
(reverse
(let loop ((lst lst) (res null))
(if (null? lst)
res
(let ((c (car lst)))
(loop (cdr lst) (if (pair? c) (loop c res) (cons c res))))))))
我沒有這個函數扁平化 –
這就是爲什麼我把我的答案放在一個! – uselpa
你是什麼意思「循環這份名單」? –
能夠按順序訪問列表中的每個單詞。 –