我正试图把我的头脑集中在Elisp的cl-循环工具上,但似乎找不到跳过元素的方法。这里有一个人工的例子来说明这个问题:我想循环一个整数列表,得到一个新的列表,其中原始列表中的所有奇数整数都是平方的。应该省略偶数整数。
根据cl-循环的文档,我应该能够这样做:
(loop for i in '(1 2 3)
if (evenp i)
append (list)
else
for x = (* x x)
and append (list x))
所需的输出是'(1 9),而不是我得到了一个错误:
cl--par
(cond ((null list) nil) ;This is true if we are not at the end of the list?
而
(cond ((null lst) '()) ; this means we are at the empty set?
不太确定这些有什么不同,有人能帮上忙吗?
非常感谢
Paul Graham写了这个,但对我来说,这看起来一点也不特别或明确。
ISTM认为编程语言由两件事定义:它的编译器或解释器,它通过fiat定义语言的语法和语义;以及它的标准库,它在很大程度上定义了熟练用户在用该语言编写代码时将使用的习惯用法和技术。
除了一些特殊的例外(例如,.NET家族的非C#成员),大多数语言的标准库都是用这种语言编写的,原因有两个:因为它将共享相同的语法定义、函数调用约定和该语言的通用“外观”,以及因为可能为编程语言编写标准库的人是它的用户,特别是它的设计者。所以没有什么特别的;这是非常标准的。
再说一次,一种语言的编译器本身并没有什么特别或不寻常的地方。C编译器是用
请看下面的代码
public List getWordList(int listNumber) {
// TODO Auto-generated method stub
List<String> list_a = new ArrayList<String>();
List<String> wordList = new ArrayList<String>();
int counter = 0;
try
{
String sel
我知道在Lisp循环中,可以使用特殊变量"it",如Gigamonkeys中的示例所示:
(loop for key in some-list when (gethash key some-hash) collect it)
我想知道除了使用let显式地存储它之外,在循环之外是否有任何等效的概念,比如:
(let ((result (foo input)))
(when result (push result acc)))
我可以使用let,但我只是好奇是否有一些语法糖可以使我的代码更简洁。