我能够加载和调用函数,但我想
更正后重新加载文件
找不到卸载或重新加载功能?只需再次使用load。卸载实际上是不可能的。例如,可以删除包,从而删除其定义。但对该包符号的其他引用可能仍然存在
正如Vijay Mathew提到的,处理这个问题的典型方法是再次创建一个文件
加载的文件以可以重新加载的方式写入可能会有所帮助
关于重新加载的几点意见:
函数/宏将替换为新定义
由于内联/宏扩展,现有代码中的函数/宏可能无法替换
CLOS类将被更新,其实例将被延迟更新
将更新结构定义,而不会更新现有结构实例
(我用Hunchentoot和Restas,只是想在这里也提一下)
我真的不知道如何使用HTTP来做这些事情,所以我想发布我的代码可能是显示我意图的最简单方式:
(define-route log-in ("/log-in/" :method :post)
(multiple-value-bind (username pwd) (hunchentoot:authorization)
(cond ((and (nth-value 1 (gethash username *users*)
有没有一种方法可以使用给定的FDML接口一次插入多个记录
给定的语句一次只能处理一个值元组,调用此函数的次数不可计数(而不是一次)的想法让我感到非常不安,我想在没有进行任何分析的情况下,这也不是最快的方法。类似的方法怎么样
; SLIME 2013-04-02
CL-USER> (ql:quickload "clsql")
To load "clsql":
Load 1 ASDF system:
uffi
Install 1 Quicklisp release:
c
据我所知,字符串是字符类型的向量。到目前为止,我的尝试没有结果
(vector-push #\a "Hol")
;; "Hol" Is not of type vector and simple-array
文字“Hol”是一个常量向量,其方式与“(1 2 3)与(列表1 2 3)不同吗?我是否应该直接创建一个字符向量并向其中添加字符?您的诊断是正确的。不过,这甚至不是文字数据(例如,(列表1 2 3)与(1 2 3))与可修改数据之间的问题。这是向量是否有一个值。的文档说明向量参数是一个带有
我试图在Ubuntu 12.04上,使用SBCL 1.1.7从命令行运行一个公共lisp脚本。我以
$ sbcl --script <my-script.lisp>
$sbcl--脚本
由于脚本是UTF_8编码的,因此我收到一些错误消息:
; compiling (DEFUN PRINT-USAGE ...)unhandled SB-INT:STREAM-DECODING-ERROR in thread #<SB-THREAD:THREAD
我正在寻找一种简单、临时地交换函数的方法。
我知道我可以手动设置一个功能符号,如下所示:
CL-USER> (setf (symbol-function 'abcd) #'+)
#<FUNCTION +>
CL-USER> (abcd 1 2 4)
7
有没有一种方法可以手动、按词汇设置函数名?例如:
CL-USER> (some-variant-of-labels-or-let ((abcd #'*))
(abcd 1 2 4))
8
我正在努力让Emacs、SLIME和quicklisp正常工作。我已设置以下环境:
已安装的Emacs
在Emacs中安装粘液
已安装SBCL
已安装quicklisp
在SBCL中运行(quicklisp快速启动:安装)
在SBCL中运行(ql:add to init file)
在SBCL中运行(ql:quickload“quicklisp slime helper”)
使用SBCL中的(ql:quickload“cl-csv”)安装包cl-csv
在.emacs中添加了(setq低级li
对于我的项目,我特别需要一个具有(除其他外)2个插槽的结构:
一个保存数据(当前状态、结构)
一个人拥有一个功能(即状态-解决方案)
该函数槽必须评估当前状态并返回基于该状态的结果。然而,我找不到如何正确地做到这一点。这是我的一段代码
(defstruct state moves-left)
(defstruct problem
(current-state)
(solution (function (lambda () (null (state-moves-left :c
例如,对于列表(A1(B2)(1C4)(D1(6F))((G4)6))=>6快速回答如下:
(defun count-sublists (list)
(if (listp list)
(1+ (loop for el in list
sum (count-sublists el)))
0))
只需在元素上循环并递归地计算所有列表。对不起……答案应该是7,因为列表本身是一个子列表。请在问题中更正它,而不仅仅是评论。如果您花些精力找到答案并展示
我试图编写封装另一个函数的函数,但我不确定如何在维护合理的lambda列表的同时正确传递参数
例如,如果我有一个函数
(defun f (x &key y z) ...)
我想写一些像这样的东西
(defun g (x &key y z)
(h (f x :y y :z z)))
;; Requires Alexandria.
(defmacro define-wrapper (name lambda-source &body body)
(let ((lam
我需要为学校写一个函数,可以计算数字而忽略字母。我需要为每一次手术做一个案例吗?我不知道怎么开始。例如:
(+ 1 A 2 X) = (3 A X)
(- A 5 1 A) = 4
(* 2 C 0) = 0
所以我做了一部分问题。函数DELNUM和DELSYM分别用于从列表中删除数字和符号。现在一切都正常了,比如(-A5A)->5不正常,因为我需要一些条件
(defun delnum (l)
(remove-if-not #'symbolp l))
(delnum '(4 S 5
我有两个包,每个包包含相同的符号:
(make-package "package1")
(make-package "package2")
(intern "SYMBOL" (find-package "PACKAGE1"))
(intern "SYMBOL" (find-package "PACKAGE2"))
我想比较一下。我需要能够写出这样的s表达式:
(package-agnostic-eq 'package1::symbol 'package2::symbol) ; => t
在CL中,我们有许多操作符根据数据类型检查相等性:=,字符串相等,字符=,然后是相等,eql等等,对于其他数据类型也是如此,对于比较操作符也是如此(编辑请不要忘记回答这些问题:)我们有通用的等吗?我们能让它们为另一个物体工作吗?)
但是,该语言具有使其通用的机制,例如,如实用公共Lisp中所述。我很好地想象了同样的==操作符,它至少可以处理整数、字符串和字符
在这方面已经开展了以下工作:
我认为这是一个很大的挫折,甚至是一堵墙,对于初学者(我就是其中之一),特别是我们这些来自其他语言(如pyth
在sbcl中,我可以像在这里打开不存在的文件一样处理错误:
(require "SB-POSIX")
(let* (fd)
(handler-case
(setf fd (sb-posix:open "w" sb-posix:o-rdonly))
(sb-posix:syscall-error (c)
(princ "error ")
(princ (sb-posix:syscall-errno c))
(princ " d
在SBCL和CCL实现中使用(make package'test)(包内测试)时,我注意到SBCL需要(cl:defun foo()(…)或(cl:descripe),而CCL不需要任何冒号或双冒号来使用内置符号。我的理解是,外部符号必须用一个冒号访问,即使它们是内置的。然而,CCL在这方面的工作方式似乎有所不同
这让我对外部符号的使用有些困惑。外部符号应该没有任何冒号,还是CCL只是为了方便而自动使用/导入/继承
此外,在符号和包的实现之间是否还有其他这些微小但显著的差异?ANSI CL标准没
计算此表达式的值。我对CLISP了解不多。
当我在CLISP上运行它时,它返回一个错误
解释错误的原因
提前感谢CLISP本身将为您提供部分答案:
(+ '(1 2 3 4 5) '(3 4 5 6 7))
+是一个只在数字上定义的函数,因此,当解释器看到一个数字列表作为+的参数提供时,它不能再进一步了
解释器将(12345)视为计算(12345)后+的第一个参数,即(引用(12345)),返回(12345)
您可能认为+更灵活,有点像它在Javascript中的工作方式。不,这只是数学加函数
这是特定语境下的一般符号问题。我想我需要回答的问题是:给定一个包含符号'foo'的参数,我如何操作符号的包部分,使其成为'package:foo'的eql
更具体的上下文:有一个单元测试包fiveam,它将测试函数存储在一个哈希表(it.bese.fiveam::*tests)中,该哈希表的键类似于package::test name,该哈希表指向包含测试的对象。要运行测试,通常会传递到run函数一个作为散列键的符号:(run!'package::test name。如果我从定义测试的tests
在“实用公共Lisp”的第3章中,我们被要求通过创建函数make CD来创建CD数据库,该函数定义如下:
(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))
在我的REPL(使用粘液)中,这似乎符合计划。。。直到我开始向数据库添加值,例如
(make-cd "Roses" "Kathy Mattea" 7 t)
(:TITL
我发现,如果行包含的值为NIL,则很难对齐列
我尝试指定列宽,但是,在输出中,NIL似乎总是与其他unicode字符具有不同的宽度,因此总是无法正确对齐。是否有方法实现更好的对齐?(是的,我希望空列表打印为零)
谢谢
(progn
(format t "~?" "~5@a ~5@a ~5@a ~5@a ~5@a~%" '(蘋果 () 桔子 () 西瓜))
(format t "~?" "~5@a ~5@a ~5@a ~
我下载并安装在SUSE 10 x86-64中。但当运行sbcl时,它会显示错误:浮点异常
这是同样的错误
我应该从源代码处编译sbcl吗?我不知道是什么导致了错误,但编译sbcl只需要大约30分钟,所以我一定会尝试。非常感谢。然后我会尝试编译它。为了确保它不是您配置中的某个东西,您应该尝试sbcl--no sysinit--no userinit在不加载任何外部代码的情况下启动sbcl。您的处理器不是很旧吗?
我试图对给定系列的任何连续数字或项目进行分组
所有连续的数字1都作为子列表返回
(defun length1-to-atom (l)
(loop for x in l collect (if (= (length x) 1) (car x) x)))
(defun group-series (n list)
(length1-to-atom
(reduce (lambda (item result)
(cond
((endp
我正在寻找一种简洁的方法来跨多个列表映射一个变量函数,但是我不想像MAPCAR那样将列表作为单独的参数传递,而是希望传递一个由任意数量的列表组成的列表,并映射这些包含的列表。我事先不知道封闭列表中有多少个列表,因此无法对其进行分解
我尝试过将MAPCAR和APPLY以各种方式结合在一起,但无法解决。我必须放弃使用MAP而直接编写迭代吗
这里有一个函数可以满足我的要求:
(defun map-within (fn list-of-lists &optional(maptype #'mapc
我正在编写一些方法来为各种元素生成HTML。每个方法都有相同的输出,但不一定需要相同的输入
回显游戏板的方法也需要一个玩家(因为每个玩家只看到自己的棋子)
回显棋盘空间不需要每个玩家进行更改(该调度实际上是在游戏棋盘方法中完成的,该方法稍后会调用空间上的回显)。理想情况下,我能做到
(defmethod echo ((space board-space)) ... )
(defmethod echo ((space empty-space)) ... )
也可以想象,我后来遇到了一个对象,它需
我正在使用CommonLisp进行一个项目,该项目使用了安装了quickload的软件包。我正在项目的根目录中创建一个bash脚本,用于测试是否安装了必要的程序,如果所有程序都已安装完毕,它将运行一个lisp脚本来加载我的项目。我想要一些方法来测试是否安装了quicklisp,这样我就可以让它请求用户自动下载和安装quicklisp。有没有办法测试一下?Quicklisp安装在clisp中,而不是作为一个包安装在操作系统上,因此使用bash内置程序测试是否安装了程序将不起作用。从Lisp内部:Q
我想通过使用burp套件作为自动代理来研究drakma的一些传出流量
但在发出https请求drakma信号(更准确地说是cl+ssl drakma使用)时崩溃:
=>
句柄#(SB-SYS:INT-SAP#X00677EE0)(返回代码:1)上的SSL库发生故障。SSL错误队列:
错误:14077438:SSL例程:SSL23\u GET\u SERVER\u HELLO:tlsv1警报内部错误
[CL+SSL类型的条件::SSL-ERROR-SSL]
重新启动:
0:[重试]重试SLIME交
在我的小项目中,我有两个数组,我们称它们为A和B
#(1233)和#(567)。我还有两个相同长度的符号列表,我们称它们为C和D。它们看起来是这样的:(num1 num2 num3)和(num2 num3 num4)
可以说列表C和D中的符号是数组A和B中的值的文本标签。所以A中的num1是1。A中的num2是2。B中的num2是5。B中没有num1,但有一个num3,它是6
我的目标是生成一个包含两个参数的函数,如下所示:
(defun row-join-function-factory (C
我目前正在尝试创建一个函数,它比较两个按优势排序的列表的内容,并创建一个也按优势排序的列表
例如(4 6 8 9 10)(1 2 5 7 9)将变成(1 2 4 5 6 7 9 10)
当我们使用递归时,我希望这必须递归地完成。我对LISP的了解有限,我正在努力解决这个问题。任何帮助都将不胜感激 这称为合并
您可以通过始终查看每个列表的第一个元素并选择较低的元素来构建一个新列表。这称为合并
您可以通过始终查看每个列表的第一个元素并选择较低的元素来构建一个新列表。您不需要自己实现这一点。Commo
我90%肯定答案是正确的,但我似乎无法找到答案。
我想知道我是否能够将不以“.lisp”结尾的源文件作为文件组件。例如,通常我有类似的
(asdf:defsystem #:hash-bang-lang
:serial t
:depends-on (#:named-readtables)
:components ((:file "package")
(:file "hash-bang-lang")))
如您所见:文件组件未指定扩展名。我想知道是否可以加载
我的网站的URI结构最近发生了巨大变化,我需要将所有旧页面重定向到相应的新页面。我有一个所有新旧URI成对的虚线列表。目前,我正在尝试为循环中的每个对象定义简单的处理程序:
(let ((redirects '(("/old/uri/example-1" . "/new/uri/example-1"))))
(dolist (redirect redirects)
(hunchentoot:define-easy-handler (???? :uri (first redirect)
我刚刚开始学习函数编程,这让我有点困惑,我现在有一个任务:删除列表行中的所有重复项,因此:
输入行:
(SETQ X (LIST 2 -3 (LIST 4 3 0 2) (LIST 4 -4) (LIST 2 (LIST 2 0 2))-3))
我希望输出是这样的:(2-3(430)(-4)()
我想用递归实现它。
我有一些概念性的问题:如何从列表中删除一个元素,或者应该为输出创建一个新的元素?在其他编程语言中,递归的每一步都有自己的变量作用域,这里是否相同?请你描述一下,你会怎么做
顺便
我想知道是否有可能重定向ECL的Linux stdio,这样它就不会与嵌入它的应用程序共享流
我的问题是,主机应用程序出于自己的目的接管了stdin、stdout和stderr。所以,我想有一个单独的控制台,用于lisp噪音和恢复当SLIME/SWANK崩溃回到顶级时。目前,SWANK hiccups将CL-USER>提示放入应用程序调试日志,操作失败(读取)表示出现错误,stdout被重定向,stdin很可能已关闭或由父进程使用
我知道你可以setf*standand*output*,等等到一
目标
我希望我的公共Lisp(SBCL+GNU Emacs+Slime)环境有点像一个Smalltalk图像,因为我希望我的所有代码都在包中组织成一个大泥团,最好是项目。换句话说,我在save lisp and die和在Emacs中设置lisp以显示保存的图像方面有些混乱。我迷路的地方是让斯旺克成功的适当方式
问题
我相信在保存Lisp并死亡之前,需要在我的Lisp图像中放置swank钩子。但它似乎有点脆弱,因为无论是我的SBCL版本还是Slime版本,它都会导致版本不匹配
问题
我错过什么了
我正在通过Paul Graham的“ANSI Common Lisp”(1996)进行学习。
第三章,练习,第二节要求一个函数,如本文标题所述。到目前为止,我只使用了书中所教的内容(显然有case结构可以清理if,但目前我并不在意)
作为第一次尝试,我最终编写了interleave,它保留了重复项:
(defun new-union(lst1 lst2)
(let((accum nil))
(dolist(x lst1)
(push x accum))
(
我试图调用lisp中的一个函数,该函数将其参数分配给一个列表,并将其打印到控制台,但没有将任何内容打印到控制台。
代码如下所示
(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))
(make-cd "Roses" "Kathy Mattea" 7 t)
对make cd函数的调用应返回
(:标题“玫瑰”:艺术家“Kathy
我不熟悉Common Lisp,但我有一个问题。
听起来是这样的:
编写PRETTY-PRINT过程,该过程接受一个参数(一个通用列表),并使用以下规则进行打印:
(
)
任何元素,即列表,都将使用相同的算法递归打印
函数应打印以下内容:
(pretty-print ' ( a (b c de) fg ))
( a
( b
c
de )
fg )
我曾多次尝试自己重写该函数,我得到了以下代码:
(defun print-lis
我试图获得一个二叉搜索树的struct print函数,如下所示,以xml风格打印出一个节点(及其子节点,递归)。其想法是,添加适当的缩进应该可以更容易地查看BST的结构
我目前拥有的是:
(defstruct
(节点::打印功能
(新南部)
(格式s“#”(节点elt n)(节点l n)(节点r n())))
英语教学(无)(无)
这将打印BST,例如:
#<5 #<4 #<2 #<1 NIL NIL> #<3 NIL NIL>> NIL>
当我更改以下形式时,根据为函数()提供的示例
(the (values integer float) (truncate 3.2 2))
到
我仍然没有收到任何编译器警告,而(整数1.2)给出
);编译器警告:
; 在位置0处的匿名lambda表单中:中违反了类型声明(整数1.2)
有人能解释一下为什么上面没有警告吗?我在CCL上测试这些。您误解了的功能。规范用这么多的话告诉您:
指定表单返回的值属于value type指定的类型。如果任何结果不是声明的类型,则结果是未定义的
(我的重点。
我正在修补它,因为它提供了运行远程GUI的选项。但是,在尝试使用远程GUI时,我遇到了在本地运行ltk时没有遇到的问题:
(in-package :ltk-user)
(defun add-current-investigation-frame (master)
(let* ((frame (make-instance 'frame :master master :width 100 :height 100))
(topic-label (make-instance '
我没法让这一切顺利进行。我正在使用deftypeSametype(xy)方法定义一个谓词,该方法计算列表x和列表y的元素是否属于相同的类型,是否位于相同的位置。当我试图调用谓词进行测试时,问题就出现了。我收到一个错误错误:SameType未定义这是我的代码:
(deftype SameType (x y)
`(cond
((and (null x) (null y) T))
(
(and (numberp (car x)) (numberp (car y)))
我希望提高收到的编译器警告的质量和数量--
在CommonLisp中有没有一种包含类型谓词的方法
过度声明的类型和过度实例——特定于实现的答案
你很好,如果有人在做的话,我很想看看是怎么做的
在CCL中编译以下内容:
(defun non-list (o)
(not (listp o)))
(deftype non-list ()
'(satisfies non-list))
(defun example (a)
(list a))
(declaim (ftype (funct
我对lisp很陌生,所以请容忍我。以下代码是我“认为”传递函数的一种方式的尝试,但它似乎是另一种方式:
(defun hello-world () (format t "hello, world!"))
(defun ll (x y) (+ (* 3 y)x))
(defun zz(x)(funcall(λ(x)x)x))
>(zz (hello-world))
>hello, world!NIL
>(z
我有一个递归函数,它给了我这个答案:
'((()) (((((a c d f e d))))) (((((a c d e f d))))))
除了我需要通过查看函数来清理它这一事实之外,这给我提出了一个问题:如何清理这个答案?如何取消嵌套这些列表以返回:
'((a c d f e d) (a c d e f d))
我需要一些策略或适当的功能,在球拍或共同口齿不清
提前谢谢 如果您只想展平列表,您想要的行为有点不清楚,在Racket中,您只需使用展平功能:
> (flatten '((
我教计算机科学已经很长时间了。最常教的语言是C语言、C++、java、Python等。我每学期都添加其他语言如Perl、Ruby等的例子,这样学生就可以看到语言间的共性。我一直在尝试使用CommonLisp,不得不承认,近40年来,我第一次用一种语言碰壁
CommonLisp让我很难得到一个简单的示例程序来编译和运行。我需要在ideone.com上运行代码,以便学生可以自由地自己尝试并进行更改,以查看发生了什么。我将非常感谢任何能为我提供的帮助…一周的奋斗是我所能承受的
代码如下:
(defcl
我的代码在REPL中运行良好,但在我的web应用程序中没有第二个值
例如(?车辆=自行车&车辆=汽车)
我试过的
当我这样做的时候
CL-USER>(setf |车辆|’(a b c)
CL-USER>
(let(| vehicle |)(multiple plist:getf all`(:| vehicle |,| vehicle |):| vehicle |)
(打印(亚历山大:展平(列表:车辆|车辆|)))
这将产生所需的输出(:车辆A B C)
但是当我提交表格的时候
<f
假设我有一个列表变量*test*设置为(:v1(1):v2(2))
然后,在一些字符串配对之后,我需要将另一个1添加到:v1,相当于:
(push 1 (getf *test* :v1))
(push 1 (getf-string-equal *test* "v1"))
但是,它看起来更像:
(push 1 (getf-string-equal *test* "v1"))
其中getf字符串等于(取自)
然而,我的问题是,我不能在返回的列表上使用setf。我可以使用一些难看的技巧来推动函数
我使用IOLIB和以下代码来解析主机名:
(sockets:address-to-string (sockets:lookup-hostname name))
我可以工作,但函数不接受任何超时参数,我也不知道如何使用套接字选项设置这些参数。不幸的是,这不容易找到(特别是,没有文档记录),而是遵循查找主机名的调用链(在Emacs中为M-),您可以看到您的代码最终调用了dns查询:
(defun dns-query (name &key (type :a) (search *dns-sea
在Haskell(和)中,可以声明受约束的类型,
例如map::(a->b)->[a]->[b]
该map将获取包含函数输入类型的列表,并返回包含函数输出的列表。
在公共lisp函数声明中是否也可以这样做?
我可以做类似的事情吗
(declaim (ftype (function (function (a) b)
(list a))
(list b)
map))
“您不能那样做”
我只是在捕捉生成的真值表上的条件时遇到了一个小问题。。因此,您输入一个逻辑表达式,然后它将其转换为一个真值表,并在其中解释它是否有效、无效或不一致。到目前为止,这是解释它的程序的一部分,但它只捕获无效或有效的。。。你能引导我通过这个吗?谢谢
*编辑//
这就是程序的运行方式:
*******欢迎!**********
随时键入(LogicStart)开始或(exit)退出。
;;已加载文件MyLogic.lisp
T
[2] >(逻辑开始)
输入逻辑表达式或公式:“(p^(~p))”
p(~p
我试图让我的lisp代码输出正确的东西。我在文档中查找format()并尝试了以下操作
(格式t”~10:)
问题是运行此代码会给我以下信息:
而不是给我这样的东西:
以下是整个功能,但我不认为它会导致任何问题:
(反三角形打印负(行numStar)
(续)
((=行0)(从三角形打印返回负零));如果行=0,则强制退出
(n0)
(普林斯(如果(考虑到你的根本问题,即打印三角形,大概是学习Lisp的一部分),你是(我猜)我不太熟悉通用的Lisp,我建议不要试图理解格式字符串语言的细节,这是一
因此,我有一个赋值,我必须从列表中删除nil,而不使用commonlisp中的remove函数。我得到了它的大部分工作,除了它没有打印出列表中的最后一个元素
我所拥有的:
(defun removeNILMost (L)
(cond ((NULL L) NIL)
((listp (car L)) (OR (removeNILMost(car L)) (removeNILMost(cdr L))))
((not (eq nil (car L))) (
1 2 3 4 5 6 ...
下一页 最后一页 共 25 页