标签: common-lisp

在Common Lisp中获取列表的前n个元素?

我如何获得n列表的第一个元素?

CL-USER> (equal (some-function 2 '(1 20 300))
                '(1 20))
T
Run Code Online (Sandbox Code Playgroud)

我绝对肯定这是基本的,但帮助一个兄弟newb out.

lisp list common-lisp

17
推荐指数
2
解决办法
1万
查看次数

Scheme或Common Lisp?

我是一名中级程序员,并决定学习常见的lisp或方案.我的问题很简单,你会选择哪一个?我不太关心语法的难度,只关心语言本身的力量,灵活性和其他方面.另外,我应该选择哪种常见的lisp或方案实现?谢谢!

lisp scheme programming-languages common-lisp

17
推荐指数
4
解决办法
2800
查看次数

Lisp中@(at-sign)的含义?

你们都知道这个故事:程序员读取其他人的代码,程序员看到他们不理解的符号,谷歌失败了,因为搜索非字母数字符号很困难.

这次它是@符号,似乎用于将一个列表的内容注入另一个列表的中间.例如:

`(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(`)或逗号(,).它是否正确?对不起,如果这是重复的,但是再一次,据我所知,它是不可能搜索的@.

lisp common-lisp

17
推荐指数
2
解决办法
1618
查看次数

是什么让你想学习Common Lisp?你想要什么?

我正在为一个刚接触Common Lisp的人们开发一个工具包(一种live-CD Lisp-in-a-Box),我想确保它广泛满足.Lisp对你有什么吸引力?你需要做什么/做什么/什么才能让你开始并让你感兴趣?

到目前为止我所拥有的:SBCL 10.22,Emacs 22.3,SLIME和LTK捆绑在一起并配置在完全启动到RAM的Linux live-CD上.


我现在已经发布了这个结果; 它可以在Thnake网站上找到.

lisp emacs common-lisp

16
推荐指数
4
解决办法
3272
查看次数

如何在Windows中获得通用lisp GUI?

我正在使用带有CLISP和Slime的Emacs,并希望能够在屏幕上绘制图片.我特别考虑绘制图形,但任何能让我绘制基本形状并操纵它们的东西都能让我开始.

windows graphics common-lisp slime

16
推荐指数
2
解决办法
1万
查看次数

在lambda函数中递归

我有以下两个功能,我希望合并为一个:

(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 recursion lambda common-lisp

16
推荐指数
2
解决办法
4696
查看次数

Lisp中的默认编程

是否可以在Lisp中使用/实现默认编程(也称为无点编程)?如果答案是肯定的,它已经完成了吗?

lisp common-lisp tacit-programming

16
推荐指数
2
解决办法
1460
查看次数

Common Lisp:为什么预测是一种特殊的形式?

由于Common Lisp的函数参数按从左到右的顺序进行求值,为什么不使用普通函数:

(defun progn2 (&rest body)
  (first (last body)))
Run Code Online (Sandbox Code Playgroud)

而不是特殊的形式?

common-lisp

16
推荐指数
2
解决办法
5936
查看次数

为什么在emacs-lisp中的函数参数之前使用#'?

我熟悉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.以下表格都是等效的:

 (lambda (x) (* x x))
 (function (lambda (x) (* x x)))
 #'(lambda (x) (* x x))
Run Code Online (Sandbox Code Playgroud)

和帮助 function

功能是一种特殊的形式eval.c.

(function ARG)
Run Code Online (Sandbox Code Playgroud)

喜欢quote,但对于作为功能的对象更喜欢.在字节编译中,function导致其参数被编译.quote 不能那样做.

所以这似乎是一个潜在的优化,但不再是.此外,来自ML/Haskell背景,以不同于任何其他数据的方式处理函数似乎很奇怪.

题:

你是否同意#'应该在emacs-lisp函数参数中使用?(简要说明Common Lisp中为什么需要它们也会很棒.)

笔记:

我认为当#'省略(值与函数)时它可能会读取不同的单元格.但这似乎是错误的,因为文档function没有说明抓住功能单元格.这是通过使用来实现的symbol-function.

相关问题是

但他们似乎认为这#'是不必要的,至少在lambdas中是这样.

lisp emacs elisp common-lisp

16
推荐指数
1
解决办法
1024
查看次数

如何删除Lisp中的变量/表单?

在Python中,我们有del删除变量的语句.

例如:

a = 1
del a
Run Code Online (Sandbox Code Playgroud)

在Lisp中这相当于什么?

(setq foo 1)
;; (del foo) ?
Run Code Online (Sandbox Code Playgroud)

lisp elisp common-lisp

16
推荐指数
2
解决办法
4411
查看次数