【发布时间】:2021-06-01 20:30:39
【问题描述】:
我经常发现自己想要使用列表中的当前元素,而不是总是需要对其运行程序来获取它,例如每次我想引用时都使用elem 而不是(car sequence)到序列中的当前元素。这有效...除非序列为空,因此我不能将let 放在null 检查之前。这是我试图做的“模式”:
(define (filter sequence)
; return a list of only those items where the filter predicate returns true
(cond ((null? sequence) nil)
; now that we know we have an active sequence, I want to short-hand 'elem' and 'rest'
(let (elem car sequence)
(rest cdr sequence))
(display elem)))
然后我收到一条错误消息let: bad syntax。有没有办法以某种方式实现上述模式?
更新:也许最好的方法就是在顶部加上一个let 并用一个简单的if 检查?比如:
(define (filter sequence)
(let ((elem (if (null? sequence) nil (car sequence)))
(rest (cdr sequence)))
(cond ((null? sequence) nil)
(display elem))))
【问题讨论】:
-
你的方法是正确的,但是你的括号在 let 绑定中是关闭的
-
@coredump 下面的答案看起来好吗?
-
您还应该看到Pattern Matching。