所以功能:
(defun royal-we ()
(sublis '((i . we))
'(if I learn lisp I will be pleased)))
Run Code Online (Sandbox Code Playgroud)
SBCL中的输出以这种方式打印:
(IF WE
LEARN
LISP
WE
WILL
BE
PLEASED)
Run Code Online (Sandbox Code Playgroud)
然而一个例子:
(sublis '((roses . violets) (red . blue))
'(roses are red))
Run Code Online (Sandbox Code Playgroud)
给出输出
(VIOLETS ARE BLUE)
Run Code Online (Sandbox Code Playgroud)
为什么SBCL在不同的行上打印列表的原子,不像其他发行版如Clisp?
我真的好奇为什么使用"删除"实际上并没有从列表中删除,如果我在一个变量中声明它,但是我有另一个变量可以使用它并且它变得非常混乱,他是我的代码;
;;;;Pig latin
(defun pig-latin ()
(let ((word (read-line)))
(setf ind-characters (loop for char across word
collect char))
(setf first-char (car ind-characters))
(setf reversed-word (reverse ind-characters));flips the
(remove (last reversed-word) reversed-word)
(print reversed-word)))
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
(#\d #\r #\o #\w)
(#\d #\r #\o #\w)
Run Code Online (Sandbox Code Playgroud)
我原本期望#\ w从输出的第二部分中删除,但除非我在变量中声明它,否则它不会.如何处理单个数据并删除/添加我需要的内容而不声明很多变量?
所以我有这个小函数在一组3个列表中返回最小值,有没有办法可以把它写得更好看?它对我来说似乎不太好看,但是我可能不知道这意味着什么(我是一个lisp noob)任何提示都会非常感激.
;;;;minimum of 3
(defun minimum-of-3 (list1 list2 list3);returns the minimum value when comparing 3 lists
(setq minimum-list '())
(setq mini '())
(loop for x in list1
for y in list2
for z in list3
do
(push x mini)
(push y mini)
(push z mini)
(push (apply 'min mini) minimum-list)
(setq mini '()))
(reverse minimum-list))
Run Code Online (Sandbox Code Playgroud)