如何從方案列表中獲取列表或獲取元素?從方案列表中獲取元素
如何在列表中爲每個元素命名(如我們爲java中的變量所做的)?
在此先感謝。
我想比較列表中的每個點到另一個點。所以,就像我們在java或python中那樣 -
for(int i;i<list.size();i++){
if (list[i]> k){
//do something
}
}
我該怎麼做類似的事情呢?
如何從方案列表中獲取列表或獲取元素?從方案列表中獲取元素
如何在列表中爲每個元素命名(如我們爲java中的變量所做的)?
在此先感謝。
我想比較列表中的每個點到另一個點。所以,就像我們在java或python中那樣 -
for(int i;i<list.size();i++){
if (list[i]> k){
//do something
}
}
我該怎麼做類似的事情呢?
例
`(define func
(lambda (a b)
(if (> a b)
(dosomething a))))`
在這種情況下, 「DoSomething的」 將是一些其他的定義,預定義或不。作爲例子,定義類似於「函數」,比如square()或者mult()。
我覺得一個遞歸一個像這樣應該名單的工作需要:
(define (func list) (if (> (car list) k) (dosomething)) (func (cdr list)))
你也可以寫兩個定義,有一個包含一個列表,並將其發送給第一個例子,並返回結果,比較,做或不做,然後繼續。
但是列表在哪裏?我應該比較列表中的每個元素。但在這裏似乎只有2個值是比較。我的主要問題是從列表中獲取元素(就像我們在java list [i]中做的那樣)。怎麼做? – fireball003 2009-06-12 08:57:30
(map (lambda (x) (if (< x k) (dosomething x) x)) list)
您可以使用for-each:
(let ((a-list (list 9 2 7 6 1 4 3 8 1)) (k 4) (something display)) (for-each (lambda (i) ; The 'name' of the list element is i (if (> i k) (something i) ; Do something with i #f)) ; Do nothing a-list))
for-each
類似於map
但返回值是不確定的。它僅被稱爲副作用。
在一個側面說明,在我看來,你正在學習來自java背景(這是好的)的方案。 Scheme程序通常以不同於Java的風格編寫。 Scheme是一種功能性語言,循環構造不常用。拿起一本關於Scheme的書,例如The Scheme Programming Language或How to Design Programs來學習如何編寫程序「Scheme Scheme」
leppie和Jonas給出了在Scheme中迭代列表的正確答案。但是,如果您需要在列表中獲取單個值,請使用list-ref
。
(let ((l '(1 2 3 4)))
(list-ref l 2))
=> 3
主要是等同於Java代碼
int[] l = new int[] { 1, 2, 3, 4 };
return l[2];
您可以使用list-ref
從由它的索引列表拉出來的值。但是請注意,在Scheme列表中實際上是鏈表 - 所以(list-ref l 100)
將需要跟蹤100個引用。如果您確實需要隨機訪問值,請使用矢量。
用功能性語言書寫時,您應該思考不同。其實你應該忘記編程思想(for循環等),只需定義你想要的。例如「我想對列表中的每個奇數應用一個動作。「 所以你可以這樣寫:
(map an-action
(filter odd? my-list))
或者病情可元> 4
(define (higher-than-four? n) (> n 4))
(map an-action
(filter higher-than-four?
my-list))
對於操作,你給任何功能:
> (map number->string
(filter higher-than-four? my-list))
("5" "6" "7" "8" "9" "10")
我不知道,如果這就是你想要的,但是這會進入整個列表(鏈接),並將每個元素與作爲參數傳遞的元素進行比較:
(define (compare aList element)
(if (> element (car aList))
(display (car aList)) ;here do something great
;here the else if you have
)
(if (not (null? (cdr aList)))
(compare (cdr aList) element)) 'ok)
這是一個程序問題,也許對某人有幫助。
greets
我不明白這個問題,你能澄清一下嗎?你想爲列表中的每個值命名? – Jonas 2009-06-12 08:37:15
感謝Jonas的迴應。我編輯了這個問題。請檢查一下。 – fireball003 2009-06-12 08:40:58