标签: common-lisp

如何将Lisp代码拆分为多个源文件?

现在,我所做的一切都设法适合单个源文件,而且这个文件非常小.你如何决定拆分成单独文件的数量和内容?

使用Java,可以很容易地确定一个文件中的内容(已经为您做出了决定),但在Lisp中我发现我编写了许多相互构建的小函数,并且很难确定哪些内容应该被拆分出.当我在Lisp中处理更大的项目时,不必重新发明轮子会很好,但我在网上找不到很多关于此的具体信息.

你能分享一些处理Lisp中较大项目的策略,还是指出一些处理这个问题的资源?

lisp version-control system common-lisp

20
推荐指数
3
解决办法
2237
查看次数

Lisp在解析方面更好吗?

我想用Lisp方言实现一个Lisp解释器,主要是作为一种学习练习.我被抛弃的一件事就是这个领域有多少选择.首先,我对学习一段时间内的一些Lisps(如Scheme或Common Lisp)更感兴趣.我不想使用Clojure为我已经使用它的纯粹事实这样做.:-)

在解析时,其中一种口味比其他口味更好吗?你认为在Common Lisp中实现Scheme是一个好主意(反之亦然)?或者两者之间是否会有足够的差异让我失望?

如果它有所不同,我想要一些跨平台的东西.我有一台Windows PC,一台Mac机和一个Linux机箱,我最终可以在其中任何一个上写这个.

lisp scheme parsing language-implementation common-lisp

20
推荐指数
1
解决办法
1377
查看次数

对于一个新的(ish)程序员来说,Lisp难以学习吗?

我对Python有一点经验(足够我可以做的事情,如果/ else/elif和一些随机数生成),但我总是对Lisp语言有一种奇怪的迷恋.我下载了一些方案源代码来查看语法,但这对我来说非常愚蠢.

对于像我这样只有一点编程经验的程序员,给出一些好书,网站和一些时间,学习Common Lisp或Scheme会特别困难吗?哪两个会更容易?就易学性而言,它们与Python和C相比如何?

谢谢

lisp scheme common-lisp

20
推荐指数
3
解决办法
7499
查看次数

什么#+#.在lisp意味着什么?

google几乎是不可能的,因此我的理解仅限于通过读取粘液源代码的上下文线索:也许它是普通lisp中对象系统的一部分?像'自我'这样的东西?

片段:

(cond #+#.(swank-backend::sbcl-with-new-stepper-p)
Run Code Online (Sandbox Code Playgroud)

也许这会使它更具有可谷歌性:磅加磅//哈希加哈希符号// octothorp plus octothorp

lisp common-lisp slime swank

20
推荐指数
2
解决办法
2330
查看次数

Common Lisp:将给定哈希表的所有键作为列表

我想知道是否有比使用循环更简洁的方法.无论如何,这在CLISP中对我有用:

(loop for key being the hash-keys of *my-hash* collect key)
Run Code Online (Sandbox Code Playgroud)

我见过其他人使用maphash,但这涉及将每个密钥累积到一个列表中.除了比使用循环更多参与之外,它还引入了副作用,我尽可能避免这种副作用 - 我更喜欢函数式编程:)

是否有针对此常见任务预定义的内容,即使特定于实现?

(defun hash-keys (hash-table)
  (loop for key being the hash-keys of hash-table collect key))
Run Code Online (Sandbox Code Playgroud)

lisp hashtable key hashmap common-lisp

20
推荐指数
2
解决办法
6889
查看次数

如何在常见的lisp中将字符串转换为整数?

如何在常见的lisp中将字符串转换为整数?例如,如果我输入一个字符串"-64",我想得到一个整数--64.谢谢.

common-lisp

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

为什么defun与(setq <name> <lambda>)不一样?

我对defun宏如何工作感到困惑,因为

(defun x () "hello")
Run Code Online (Sandbox Code Playgroud)

将创建函数x,但符号x仍将是未绑定的.

如果我将一些lambda绑定到x,那么x将有一个值,但它不会被解释器视为函数,如下所示:

(x)
Run Code Online (Sandbox Code Playgroud)

我认为这与defun应该在全球环境中定义功能这一事实有关,但我不确定它究竟意味着什么.为什么我不能在当前环境中影响它呢?

有没有办法强制解释器将符号视为函数,如果某个lambda绑定到它?例如:

(setq y (lambda () "I want to be a named function"))
(y)
Run Code Online (Sandbox Code Playgroud)

PS:我正在使用SBCL.

lisp sbcl common-lisp

20
推荐指数
2
解决办法
1870
查看次数

在lisp中将数字转换为字符串

我试图找到一个lisp函数来在数字和字符串之间进行转换,经过一些googling后,我喜欢一个具有相同名称的函数.当我进入(itoa 1)SLIME打印时:

Undefined function ITOA called with arguments (1) .
Run Code Online (Sandbox Code Playgroud)

我该如何进行转换?

lisp common-lisp itoa

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

为什么Common Lisp中不存在原始的`call-with-current-continuations`?

最近,我一直在调查Scheme和Common Lisp之间关于这两种语言对延续的方法的区别.

我注意到Common Lisp方法比Scheme方法更保守.

此外,Scheme提供了一个原始的call-with-current-continuation,通常是缩写的call/cc,它在ANSI Common Lisp规范中没有等价物(尽管有一些库试图实现它们).

有没有人知道为什么决定不在ANSI Common Lisp规范中创建类似的原语?

提前致谢.

lisp scheme continuations callcc common-lisp

20
推荐指数
3
解决办法
3091
查看次数

Common Lisp Double-Backquote,Unquote,Quote,Unquote sequence?

我正在阅读Let Over Lambda,它涉及一些非常深层次的宏创作.它很吸引人,而且我主要是为了跟上它.

在第4章中,Hoyte实现了用于CL-PPCRE匹配和替换函数的读取器宏,这样您就可以执行以下操作:

(#~m/(foo|bar)\d+/ "Some foo99")    ; matches!
(#~s/foo(\d+)/bar\1/, "Some foo99") ; "Some bar99
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我们定义了一个使用双反引号的宏,因为它实际上是由一个包装宏扩展的,它需要引用的值(它返回一个lambda形式).在准引用列表中,有一些使用以下序列,',varname,我无法理解.初步,'在这做什么?

(defmacro! pcre/match-lambda-form (o!args)
  "Expands to a lambda that applies CL-PPCRE:SCAN"
  ``(lambda (,',g!str)
      (cl-ppcre:scan ,(car ,g!args)
                     ,',g!str)))
Run Code Online (Sandbox Code Playgroud)

实际上,defmacro为了清楚起见,如果你还没有读过这本书,我可能会更好地将其提炼为仅使用的东西.str是一个符号,args是一个列表:

(defmacro pcre/match-lambda-form (args)
  "Expands to a lambda that applies CL-PPCRE:SCAN"
  ``(lambda (,',str)
      (cl-ppcre:scan ,(car ,args)
                     ,',str)))
Run Code Online (Sandbox Code Playgroud)

引号基本上是双引用内部部分,因此结果可以不加引号两次?有效地'str进入扩展形式,而不仅仅是str

编辑| 感谢Terje D.和一些在REPL中玩游戏,这几乎是这样的情况:

(defvar a 42)

(equal ``(,,a)  '(list 42)) ; T
(equal ``(,a)   '(list a)) …
Run Code Online (Sandbox Code Playgroud)

lisp macros common-lisp

20
推荐指数
1
解决办法
2448
查看次数