Lisp 社区中最大的分歧之一是我们是否应该拥有carandcdr或firstand rest。一个传统的优势car和cdr是我们可以结合他们产生像pronoucible功能cdaddr。不使用carand 的Lisps cdr,例如 Clojure,通常如何与firstand形成这样的组合rest?有没有共识?
如果我做
(setq x '(NOT (NOT (NOT (NOT A)))) )
Run Code Online (Sandbox Code Playgroud)
(cdr x) 是 (NOT (NOT (NOT A))))
但(cdr (cdr x))为NIL
这里发生了什么?
我正忙于计算机程序的结构和解释练习2.18.在这里,我们必须定义一个反向过程以反转列表.它应该做到以下几点:
(reverse (list 1 4 9 16 25))
;; => (25 16 9 4 1)
Run Code Online (Sandbox Code Playgroud)
我想出了以下定义:
(define (reverse list)
(if (null? list)
list
(cons (reverse (cdr list)) (car list))))
;; => (mcons (mcons (mcons (mcons (mcons '() 25) 16) 9) 4) 1).
Run Code Online (Sandbox Code Playgroud)
然后在解决方案中找到类似如下的内容:
(define (reverse items)
(if (null? (cdr items))
items
(append (reverse (cdr items))
(cons (car items) nil))))
;; => (mcons 25 (mcons 16 (mcons 9 (mcons 4 (mcons 1 '()))))).
Run Code Online (Sandbox Code Playgroud)
这里append和cons …
我有这个表达,
(write (cdr (car' ('(p q) r))))
Run Code Online (Sandbox Code Playgroud)
它给出((P Q))了输出.我整天都在摸不着头脑,仍然无法弄清楚这是怎么回事.
只做car部分给出,
(write (car' ('(p q) r)))
Run Code Online (Sandbox Code Playgroud)
给'(P Q).
然后,根据我(cdr '(P Q))应该给出(Q)的输出.
最后的答案'(P Q)是怎样的,是我的问题.
我是一名Common Lisp初学者,正在努力完成我的任务之一......
我的一个CS任务是创建一个基本上作为clisp的内置nthcdr函数的函数.
我们称之为ncdr:
(ncdr n L)=> n是我们要输出的cdr,L列表
例子:
(ncdr 2 '(a b c)) => (c)
(ncdr 0 '(a b c)) => (a b c)
(ncdr -1 '(a b c)) => nil
(ncdr 5 '(a b c)) => nil
Run Code Online (Sandbox Code Playgroud)
所以我的方法是设置一个计数器并将其与n进行比较
以下是我想到的条件:
if n < 0 -> nil
if counter < n -> + 1 counter and (ncdr (cdr list)
if counter = n -> output list
if counter > n -> nil
Run Code Online (Sandbox Code Playgroud)
这就是我想出的......我不认为这是最有效的方式,而且现在,它不起作用.
(defun ncdr (n L &aux counter)
(setq …Run Code Online (Sandbox Code Playgroud)