如何从方案列表中获取列表或获取元素?从方案列表中获取元素
如何在列表中为每个元素命名(如我们为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