我如何获得n列表的第一个元素?
CL-USER> (equal (some-function 2 '(1 20 300))
'(1 20))
T
Run Code Online (Sandbox Code Playgroud)
我绝对肯定这是基本的,但帮助一个兄弟newb out.
我是一名中级程序员,并决定学习常见的lisp或方案.我的问题很简单,你会选择哪一个?我不太关心语法的难度,只关心语言本身的力量,灵活性和其他方面.另外,我应该选择哪种常见的lisp或方案实现?谢谢!
你们都知道这个故事:程序员读取其他人的代码,程序员看到他们不理解的符号,谷歌失败了,因为搜索非字母数字符号很困难.
这次它是@符号,似乎用于将一个列表的内容注入另一个列表的中间.例如:
`(5 6 7 ,@'(8 9) 10 11)
;=> (5 6 7 8 9 10 11)
Run Code Online (Sandbox Code Playgroud)
我很满意这种用法,但我想知道我是否理解@正确的行为?它有其他用途吗?以下成绩单中的错误是什么原因(来自CLISP)?
[1]> (list 1 2 3 4 @'(5 6 7))
*** - SYSTEM::READ-EVAL-PRINT: variable @ has no value
Run Code Online (Sandbox Code Playgroud)
最后,到底是 @什么?它似乎不是一个功能:
[3]> (print #'@)
*** - FUNCTION: undefined function @
Run Code Online (Sandbox Code Playgroud)
我猜这是一个基本的语法,如backquote(`)或逗号(,).它是否正确?对不起,如果这是重复的,但是再一次,据我所知,它是不可能搜索的@.
我正在为一个刚接触Common Lisp的人们开发一个工具包(一种live-CD Lisp-in-a-Box),我想确保它广泛满足.Lisp对你有什么吸引力?你需要做什么/做什么/什么才能让你开始并让你感兴趣?
到目前为止我所拥有的:SBCL 10.22,Emacs 22.3,SLIME和LTK捆绑在一起并配置在完全启动到RAM的Linux live-CD上.
我现在已经发布了这个结果; 它可以在Thnake网站上找到.
我正在使用带有CLISP和Slime的Emacs,并希望能够在屏幕上绘制图片.我特别考虑绘制图形,但任何能让我绘制基本形状并操纵它们的东西都能让我开始.
我有以下两个功能,我希望合并为一个:
(defun fib (n)
(if (= n 0) 0 (fib-r n 0 1)))
(defun fib-r (n a b)
(if (= n 1) b (fib-r (- n 1) b (+ a b))))
Run Code Online (Sandbox Code Playgroud)
我想只有一个函数,所以我试过这样的事情:
(defun fib (n)
(let ((f0 (lambda (n) (if (= n 0) 0 (funcall f1 n 0 1))))
(f1 (lambda (a b n) (if (= n 1) b (funcall f1 (- n 1) b (+ a b))))))
(funcall f0 n)))
Run Code Online (Sandbox Code Playgroud)
但这不起作用.确切的错误是*** - IF: variable F1 has no value …
是否可以在Lisp中使用/实现默认编程(也称为无点编程)?如果答案是肯定的,它已经完成了吗?
由于Common Lisp的函数参数按从左到右的顺序进行求值,为什么不使用普通函数:
(defun progn2 (&rest body)
(first (last body)))
Run Code Online (Sandbox Code Playgroud)
而不是特殊的形式?
我熟悉Emacs Lisp,但不熟悉Common(或任何其他)Lisp.一些Lisp程序员建议(例如,emacs的一个基本函数),它可以#'在Lisp代码中的函数参数前使用.例如:
(mapc #'my-fun '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
在Emacs Lisp中,我相信这相当于
(mapc 'my-fun '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
从elisp手册,第12.7节.
读取语法
#'是使用的简写function.以下表格都是等效的:Run Code Online (Sandbox Code Playgroud)(lambda (x) (* x x)) (function (lambda (x) (* x x))) #'(lambda (x) (* x x))
和帮助 function
功能是一种特殊的形式
eval.c.Run Code Online (Sandbox Code Playgroud)(function ARG)喜欢
quote,但对于作为功能的对象更喜欢.在字节编译中,function导致其参数被编译.quote不能那样做.
所以这似乎是一个潜在的优化,但不再是.此外,来自ML/Haskell背景,以不同于任何其他数据的方式处理函数似乎很奇怪.
你是否同意#'应该在emacs-lisp函数参数中使用?(简要说明Common Lisp中为什么需要它们也会很棒.)
我认为当#'省略(值与函数)时它可能会读取不同的单元格.但这似乎是错误的,因为文档function没有说明抓住功能单元格.这是通过使用来实现的symbol-function.
相关问题是
但他们似乎认为这#'是不必要的,至少在lambdas中是这样.
在Python中,我们有del删除变量的语句.
例如:
a = 1
del a
Run Code Online (Sandbox Code Playgroud)
在Lisp中这相当于什么?
(setq foo 1)
;; (del foo) ?
Run Code Online (Sandbox Code Playgroud)