有人可以解释以下行为吗?具体来说,为什么函数每次都返回一个不同的列表?为什么每次调用函数时都没有some-list
初始化'(0 0 0)
?
(defun foo ()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
Run Code Online (Sandbox Code Playgroud)
输出:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:
另外,假设我希望'(1 0 0)
每次输出函数,推荐的实现此函数的方法是什么?
我是Lisp的初学者.我正在尝试记忆递归函数来计算Collatz序列中的项数(对于Project Euler中的问题14 ).我的代码是:
(defun collatz-steps (n)
(if (= 1 n) 0
(if (evenp n)
(1+ (collatz-steps (/ n 2)))
(1+ (collatz-steps (1+ (* 3 n)))))))
(defun p14 ()
(defvar m-collatz-steps (memoize #'collatz-steps))
(let
((maxsteps (funcall m-collatz-steps 2))
(n 2)
(steps))
(loop for i from 1 to 1000000
do
(setq steps (funcall m-collatz-steps i))
(cond
((> steps maxsteps)
(setq maxsteps steps)
(setq n i))
(t ())))
n))
(defun memoize (fn)
(let ((cache (make-hash-table :test #'equal)))
#'(lambda (&rest …
Run Code Online (Sandbox Code Playgroud) 我试图了解Lisp的部分内容,到目前为止我还没有用过很多东西.读宏已经引起了我的注意.没有一个巨大的关于他们的信息的量使用,它会帮看看什么人跟他们做,既能得到它们是如何工作的例子,也看什么类型的问题可以与他们接近.接下来,是否有任何指导方针可以了解读取宏的优缺点是什么?
使用LispWorks步进器进行计算非常直观,但我无法在SBCL中找到它.有人可以给我一个如何在REPL中使用SBCL步进器的一些简单函数的分步示例吗?谢谢.
我有一些不理解来自gnu clisp的动作假设,我有一些代码 (let ((x "Hi!"))(print x))
.如果我从控制台执行它(比如,clisp fileName.lisp),我明白了
嗨!
但是,当我从解释器执行它时,我会看到这个文本两次.为什么?
请帮帮我.
我想知道是否有一些函数式语言用于Web开发,哪些是最有用的并且支持这个目标?
DO,PROG等在它们的身体周围建立一个名为nil的隐式块.CLHS不提供执行此操作的所有标准宏的列表.到目前为止我所知道的:
DO
DO*
PROG
PROG*
LOOP
DOLIST
DOTIMES
DO-SYMBOLS
DO-ALL-SYMBOLS
DO-EXTERNAL-SYMBOLS
Run Code Online (Sandbox Code Playgroud)
是否有任何其他标准CL宏或特殊形式建立隐式nil块?
将项目添加到列表末尾的典型方法是什么?
我有一个列表(1 2 3)并想要添加4(其中4是评估结果(+ 2 2))
(setf nlist '(1 2 3))
(append nlist (+ 2 2))
Run Code Online (Sandbox Code Playgroud)
这表示append需要一个列表,而不是一个数字.我怎么做到这一点?
我是初学程序员,正在浏览"Land of Lisp"这本书.
我一直在用REPL输入书中的例子.是否可以将我当前的程序保存为.lisp文件,以便我可以加载它并在以后继续处理它?我知道我可以在文本编辑器中创建.lisp文件并加载它们,但我很乐意在全屏模式下使用REPL来做示例.
common-lisp ×7
lisp ×7
clisp ×2
append ×1
block ×1
clojure ×1
debugging ×1
land-of-lisp ×1
let ×1
list ×1
literals ×1
memoization ×1
printing ×1
reader-macro ×1
sbcl ×1
scheme ×1
scope ×1
stepper ×1