常用的Lisp递增/递减数字和/或数值变量的方法是什么?如果只想使用结果,而不修改原始数字(参数),请使用内置的“+”或“-”函数,或其缩写“1+”或“1-”。如果要修改原始位置(包含数字),请使用内置的“incf”或“decf”函数
使用加法运算符:
(setf num 41)
(+ 1 num) ; returns 42, does not modify num
(+ num 1) ; returns 42, does not modify num
(- num 1) ; ret
我刚开始学习Lisp,似乎不理解以下代码:
(setf y (loop for x in y
for z = (something)
unless (condition for z)
append z))
哪里追加了z?它追加到循环终止时返回的未命名列表中。作为第一近似值,您可以将其视为
(loop ... append z into result finally (return result))
appen
我有一个简单的问题:将对象收集到一个列表中并向后遍历该列表。看起来很简单,但这段代码是高负载计算的一部分。使用conses是很自然的,因为添加新元素和顺序访问需要O(1)。但是,如果我需要一个有效的双链接列表,以便在两个方向上轻松地遍历它,我该怎么办呢?使用(反向)?它需要O(n)内存和时间,所以实际上在我的情况下需要O(n^2)(这真的很糟糕)。使用(最后一个)还是(附加)?同样的故事:O(n)。我真的不明白在哪里可以找到(除了源代码)关于标准库函数计算复杂性的任何信息。它依赖于实现吗?对于各
我宁愿使用让。。。而且。。。而且。。。在中,尽可能使用嵌套的let,但对于相互依赖的表达式,正常的let语法不允许这样做
不允许:
let encrypt password =
let seed = int 16
and keys = xlat seed (length password)
and plaintext = map code (explode password) in
map2 logxor plaintext keys
OCaml是否有一
我希望能够说(defvar x y)并将它绑定到绑定到x的符号,而不是x,但是defvar只会将它绑定到符号x,这太糟糕了。如何在不默认将其添加为符号属性的情况下执行此操作?您可以使用符号值访问器:
CL-USER> (defvar *sym* 'abc)
*SYM*
CL-USER> (setf (symbol-value *sym*) 100)
100
CL-USER> abc ;non-ANSI-portable, since ABC is undeclared
1
一个函数和一个宏
;; I am sorry for the confusing function name.
;; As one answer suggests, cons-if-not-member is the better name.
(defun cons-if-member (element list)
(if (member element list)
list
(cons element list)))
(defmacro pushnew-no-bell
假设我想从状态列表中删除一个步骤(元素)
(defparameter *states* '((:top nil nil) (:subjects nil nil)))
;predicate
(defun equal-state? (step state)
(equal (car step) state))
如果我使用(删除If#'equal-state?*states*),那么如何将第二个参数(state)传递给谓词
编辑:我终于找到了一个类似的问题,但我倾向于保留它,因为问题很清楚
CL
阅读让我思考什么构成了一个表达式的有效载体。显然,可以使用常用语法“调用”符号和lambda。据报道,
函数名n。1.(在环境中)一个符号或一个列表(setf符号),它是该环境中函数的名称。2.符号或列表(setf符号)
因此,理论上,(setf some name)是一个函数名。我决定试一试
(defun (setf try-this) ()
(format t "Don't name your functions like this, kids :)"))
((setf try-thi
我正在从lisp移植一些代码,但我在这一部分遇到了麻烦(显然这是针对mit方案的)
当然,我可以跳过这一步,实现评论中所说的功能,但我只是想确保背景中没有魔法发生。所以这个函数是如何工作的——它实际上在哪里读取字符?它是否像我想象的那样难看?它是否会在最后一次签入句末时将字符作为副作用使用??或者字符准备好了吗?实际上读到了什么
但是,再说一遍,(句末?)(c-g-iter(+num 1))是什么意思,因为我不希望c-g-iter返回一个字。我不是方案程序员,但似乎在读取字符时正在使用字符
句末
在我现有的软件中,我使用自制的决策树实现了遗传编程,该决策树能够在以数组形式提供给它的一些布尔数据中应用基本逻辑运算符(AND或NOT)。我使用的平台是带有SQLServer后端的.NET/C。在寻找提高我的遗传程序性能的方法时,我得出结论,我需要函数式语言附带的几乎所有附加功能,我相信Scheme或LISP是最好的解决方案,除非我想实现COND、IF、,Comparison运算符等扩展了现有的实现
我向论坛提出的问题是,是否有任何有效的方法从.NET应用程序调用Scheme(或LISP),以某
我在学习CL,而且我在其他语言方面的经验很少。有没有人能用外行的语言向我解释一下这意味着什么,特别是这里的“out”代表什么,以及它们是如何结合在一起的:
(defun save-db (filename)
(with-open-file (out filename
:direction :output
:if-exists :supersede)
(with-standard-io-syntax
我创建了一个很好的小程序:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(let ((oddresult '())
(evenresult '()))
(loop for n from 0 to (- (length seq) 1) do
(if (oddp n)
(push (nth n seq) oddresu
我正在阅读格雷厄姆的书《关于Lisp》,无法理解第37页的以下示例:
If we define exclaim so that its return value
incorporates a quoted list,
(defun exclaim (expression)
(append expression ’(oh my)))
> (exclaim ’(lions and tigers and bears))
(LIONS AND TIGERS AND BEARS OH MY)
>
学习Lisp的好书或教程是什么?如果你喜欢通过编写游戏来学习,现在可以使用《Lisp之地》,请参见一个好的起点是Paul Graham写的,这是我现在非常喜欢的:)
编辑:正如“格雷厄姆的编码风格有几个不应该被认为是典型的领域”所述,并列出了这些领域。你有没有看过?对于任何对该语言感兴趣的人来说,这是一本很棒(而且是免费的)的书。温斯顿和霍恩的实际上是一本非常好的教科书。我是偷来的(亚马逊上有很多2美元的旧拷贝),我发现它是一个不错的学习工具。它有时比Paul Graham的ANSI Commo
这意味着要在哪个版本/方言/实现的LISP上运行
(据我所知,本书是用Common LISP编写的(如引言中所述),并且它早于1994年CL标准)
把问题一分为二让它更清楚。如果我们看看彼得·诺维格的发现,这里有一点
(eval-when (eval compile load)
;; Make it ok to place a function definition on a built-in LISP symbol.
#+(or Allegro EXCL)
(dolist (pk
我对这个计划还不熟悉,我正在使用Racket博士来试图找到名单的中位数
例如,(中值2 1 3)应返回2,(中值1 5 5 2 3)应返回2.5
我使用的是R6RS方案规范,允许使用get line
以下是我到目前为止的情况:
#!r6rs
(import (rnrs))
(define (median-interactive lst)
(display "Enter input:")
(let ((input (get-line (current-input-port))))
我一直在读关于Racket如何用于学术研究的文章,但我在寻找商业和/或初创企业的商业成功案例时遇到了问题。是否有人在商业上成功使用球拍,或者我找错了方向?我这样问是因为我有一个创业的想法,目前正在评估语言和工具。有几家公司正在商业上使用Racket。一个重要的例子是,该公司在Racket中构建了他们的调度/工作流跟踪系统,并将其用于其他项目。我们在商业上使用mzscheme。Mzscheme是plt(racket)的power R5RS实现。有很多,您应该查看邮件列表档案,其中不时会出现主题。(
为Pilog自动生成关键点的最佳方式是什么?我已经
一直在四处搜寻,找不到任何相关的东西
如有提示和指示,将不胜感激。谢谢。在MySQL实例中,您可以通过以下方式获得与自动增量相同的行为
一:
我在VizReader代码中经常使用它
如果我知道(id)的话,我不太确定我会经常使用它
功能从一开始:
在我的例子中,这一切都是关于显示一个很好的id,很容易与之关联
在我的非传统gui中,可以看到人和JavaScript
方法可以实现这一点,但后者更为优雅
/亨里克·萨维尔
(从Henrik Sarv
我想在lisp中编写一个函数,它获取两个成对列表,并从第二个列表中删除第一个列表的所有匹配项。
例如,如果我们有list1((ab)(cd))和list2((gh)(ab)(ji)),通过调用此函数,结果将是((gh)(ji))
到目前为止,我有以下代码(不起作用):
其中,如果第一个列表中的对象等于第二个列表中的对象,则retira应删除列表中对象的所有引用,并且retira ocupadas应注意比较Todos ocupados是一个生成第一个列表的函数
这目前不起作用,我做错了什么?这就是
具体而言,此处提及的集合概念:
我了解数据结构是如何工作的,以及如何遍历它们,但是使用它更难概念化
有人介意用不同的词来解释它吗?也许这会有助于它的点击。非常感谢。如果您有一套(a b c),那么尝试将a插入其中将产生相同的(a b c)。它只是一个集合,具有约束/保证没有重复的值
示例用法:您希望查找文本中使用的所有单词,但它们的频率不相关。如果你有一个集合,那么算法就是:遍历所有单词并将每个单词添加到集合中。由于集合会自动丢弃所有重复项,因此当您完成时,它是正确的结果。它的使用是什么意思?如
假设我们使用SBCL的#'save-lisp-and-die来创建一个服务器应用程序App1,它工作得非常好。现在我们想用新版本替换函数#'func1,而不停止App1。我们如何在Common Lisp中实现这一点
任何建议都将不胜感激 我个人确保SWANK(SLIME的服务器部分)正在运行,这样我就可以随时使用Emacs+SLIME连接到映像并重新定义我想要的内容
(ql:quickload "swank")
(swank:start-server :port 1234) ;; listen
亚历山大港在将一个简单的主义者转变为普利斯特方面表现出色,例如:
> (get-document "flower-photo-with-lytro")
((:|_id| . "flower-photo-with-lytro")
(:|_rev| . "6-eb6d9b71251c167039d3e73d8c0c9a63")
(:TITLE . "flower-photo-with-lytro")
(:AUTHOR . "devnull")
(:TEXT . "hello her
我使用此函数从列表x中删除数字
(defun rm-nums (x)
(cond
((null x) nil)
(t (mapcar 'numberp x))))
但是,当我输入(rm nums'(32 A T 4 3 E))
返回(T NIL T NIL)
我希望它不是返回T或Nil,而是只返回导致Nil的值[不是数字]
所以这个例子应该返回(A T E)
我应该使用mapcar而不使用递归或迭代,或者bultin函数“remove if”
我认为它与一种叫做apply
字母“t”在LISP中是什么意思
例:
我的教科书是一个教材包,所以它没有完全解释所有的含义。
谢谢。T是Common Lisp中的规范真值。这里它被用作ELSE,确保COND的最后一个分支始终为true。(除NIL之外的任何值也将计为true。)有关详细信息,请参阅
tn。1.A.表示true的布尔值。B表示真值的规范广义布尔值。(尽管除nil以外的任何对象都被认为是广义布尔值,但t通常在没有特别理由选择一个对象而不是另一个对象时使用。)
(defun last2 (lst)
(cond
此功能按预期工作:
(defun highest (lat)
(cond
((null lat) nil)
((null (cdr lat)) (car lat))
(T (higher (car lat) (highest (cdr lat))))))
(defun higher (a1 a2)
(cond
((> a1 a2) a1)
(T a2)))
但是如果我将参数更改为&rest:
当计算器应该计算本例中字符之间没有括号的“(+*32-21)”时,如何将计算器写入前缀表示法?当我有括号时,我可以处理它,但在这种情况下,我迷路了。在谷歌上快速搜索生成了wikipedia页面,并使用堆栈实现了前缀求值(伪代码)。这是编写自己的实现的起点。还请注意,可以使用Lisp的链表轻松实现堆栈,只需在头部添加/删除元素。在google上快速搜索wikipedia页面,并使用堆栈实现前缀求值(伪代码)。这是编写自己的实现的起点。还请注意,使用Lisp的链表可以很容易地实现堆栈,只需在头部添加
有人能帮我吗
(define f (lambda (x)
(cond
((null? x) 0)
(#t (+ (* (car x) (car x)) (f (cdr x)))))))
我不明白这个函数是不是尾部递归的?
如果是,原因是什么?它不是尾部递归,因为函数在返回之前做的最后一件事是计算(+…)。为了实现尾部递归,返回之前的最后一个操作必须是递归调用
使函数尾部递归通常涉及采用累加器参数的辅助函数:
(define f0 (lambda (x acc)
(if
我对下面的LISP表达式有问题。对浮点数进行求和时存在浮点精度错误
CL-USER> (+ -380 -158.27 -35.52)
Actual: -573.79004
Expected: -573.79000
请建议我如何在LISP中实现预期结果(我使用的是Lispworks)。浮点数不一定精确。通常一个实现有单浮点数和双浮点数。也可能有短期和长期浮动
单浮子
CL-USER 7 > (+ -380 -158.27 -35.52)
-573.79004
现在使用双浮动:
我在分析LISP,我不是专家,但有些事情困扰着我:
一些原语如list接受多个参数。e、 g:
(list 1 2 3)
=> (1 2 3)
另一方面,quote似乎只接受一个参数。e、 g:
(quote (1 2 3))
=> (1 2 3)
(quote x)
=> 'x
(quote 1 2 3)
=> 1 ???
(quote 1 2 3)即带有多个参数的quote忽略了其他参数,这有什么原因吗
如果(引号1 2 3)的计算结果为(1 2 3),即提供多
lispquote如何在内部工作?
例如:
(quote (+ 1 (* 1 2)) )
似乎相当于
(list '+ 1 (list '* 1 2))
这意味着它是如何递归地象征头部值的。这个功能是内置的吗
如果您不相信我,请运行(equal(引号(+1(*12)))(list'+1(list'*12))。quote只返回未计算的参数。但什么是未经评估的论点
定义Lisp程序时,它要么从文本源读入s表达式形式,要么直接按照s表达式构造。宏就是生成s表达式的一个示例。无论哪种方式,都有一个数
我有一个函数,它返回一个值并将数据打印到stdout和stderr。我无法修改此函数。我现在想执行这个函数,捕获打印到stdout和stderr的数据,并将其存储在两个单独的变量中。如果可能,我还希望将函数的返回值存储在第三个变量中
我是accross(输出到字符串(*standard output*)…),但这不允许我同时捕获stdout和stderr。我有哪些选项?您可以使用let将流绑定到输出字符串流。例如:
(defun print-stuff (x y)
(format t "st
我有一个Lisp程序,它遍历嵌套列表并删除与传递给函数的元素相匹配的元素。我的问题是,如果其中一个嵌套列表中的所有内容都被删除,我需要打印()而不是NIL
(defun del (x l &optional l0)
(cond ((null l) (reverse l0))
((if (atom x) (eq x (car l)) (remove (car l) x)) (del x (cdr l) l0))
(T (del x (cdr l) (cons (if (
因此,我知道有一个使用if语句的解决方案,如下所示
(defun numdigits (n)
(if (< -10 n 10)
1
(1+ (numdigits (truncate n 10)))))
我的逻辑是:
如果0大于x-10,则返回1(因为这意味着数字小于10)。否则,返回1+nbDigits(数字除以10时的商),直到达到基本大小写为止
我得到了一个错误:
函子位置中的非法参数:1 in(1+(NBDIGITS(截断数字
我有一个关于LISP编程语言的问题
我要做的是读取一个文件并将数据保存在该文件中
为此,我找到了这样的函数并执行了它
(defun get-file (pathname)
(with-open-file (stream pathname)
(loop for line = (read-line stream nil)
while line
collect line)))
get-file("sample.txt")
这是一个未绑定的变量。为
在lisp中查找与fset等效的setf方法。(符号函数'foo)是elisp中的通用变量,因此可以使用:
(setf (symbol-function 'forward-word) #'backward-word)
作为替代方案:
(fset 'forward-word #'backward-word)
(作为旁注,当您想使用动态范围覆盖函数时,您可以使用cl-letf做同样的事情,以替代不推荐的flet。这不是问题。你说的fset是什么意思?有什么问题?你有一个例子吗?你试了什么?预期的
我正在创建一个简单的elisp测试仪。
然而,我得到了如下所示的错误行为(我无法理解)
我认为测试人员应该自然地返回t测试用例(:eq'a'a)和(:eq(返回符号)'a),因为我的测试人员也在下面的代码之前。事实并非如此
下面的代码已经超出了必要性,但在大多数情况下,它是在检查明显的行为
我认为我的测试人员也应该返回那些预期的返回值
有什么好主意吗?
甚至解释这种行为的原因都有助于改进我的测试人员。如果你能给我点东西,我将不胜感激
;; return-symbol is always retu
我试图学习Lisp中S表达式的概念。我遇到了以下问题:
给出一个S表达式的示例,该表达式不能
使用列表表示法表示
列表符号是什么意思?我理解sexps的伟大理念,但是否有可能创建一个不可复制的sexps
使用列表符号表示?如果是这样的话,我能对表示它的二叉树说些什么呢?在本文中,我理解列表表示法是线性链中点对表示法的缩写:列表表示法a b c表示点对表示法a。BC零
这意味着任何不能表示为嵌套列表的内容都符合以下描述:不正确的列表i。E最后一个cdr不是零或循环列表
不正确的列表示例:a b c
我试图用Lisp编写我自己的put pixel on(Gdk)pixbuf。当我最终意识到如何在CL中操作C指针时,出现了新的障碍-(gdk:pixbuf get pixels pb)返回负数。我的问题是:我能否以某种方式将其转换为有效指针?我尝试使用cffi:convert from foreign和cffi:translate from foreign(它们之间有什么区别?)失败了
以下是我的实际(不工作)代码:
是一个泛型函数。您可以使用定义自己的外部类型,然后向CFFI:TRANSLAT
我在CL玩,在我尝试处理一个完整的二维版本之前,我制作了一个一维版本的战舰,我遇到了一个问题。为了检查船是否在那里,我用零表示它,当一个点被击中时,我用星号替换它,这样我可以用numberp检查列表。然而,当我运行(新游戏)时,它会立即结束,这告诉我我没有正确地输入零,以便它们被识别为数字。我做错了什么?我知道这一定是新手犯的错误
;;;; Suez-Canal.lisp
;;;;
;;;; A simple, 1-Dimensional version of Battleship
;;;; T
好的,我知道浮点运算的原理。但是,每当我处理它的时候,它并没有停止困扰我
我试着做一些时间轴生成功能。这个想法很简单。让smt像这样
(defun make-time-axis (start step stop)
...)
所以,当你用例如
(make-time-axis 0 0.1 1.2)
结果将是
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1
但每当我做任何事
(loop for i from 0.0 below 1.2 by 0.1
所以我有这个函数:
(define (try try-block catch-block finally-block)
; Implements try/catch/finally like in most other languages
)
为此,我想创建一个“helper”宏,避免重复说(lambda()…),有点像set和setq:
(define-macro (tryq try-block catch-block finally-block)
(try
我有一个关于lisp中列表评估的问题
为什么没有对(a)和(+a1)进行评估
(defun test (a) (+ a 1))
就像(打印4)在这里不计算
(if (< 1 2) (print 3) (print 4))
(test (print (+ 2 3)))
这与它们是标准库函数有关吗?我可以在我的lisp程序中定义这样的函数吗?如果和defun是宏。宏将表单扩展为较长的代码段。在展开时,不会计算宏的任何参数
当您试图编写函数,但由于需要实现自定义求值策略而陷入困境时,这是一
我用的是R5R(在球拍中)。这是我的例子
(map (lambda (x) (list (apply + x) (apply * x))) '((1 2 3) (4 5 6)))
-> ((6 6) (15 120))
我只是想知道是否有这样的内置函数
(map-apply '(+ *) '((1 2 3) (4 5 6)))
这可能会产生相同的结果。没有内置内容,但您可以编写自己的:
(define (map-apply funcs items)
(map (lambda (i
我应该在哪里使用defun编写函数定义?在调试窗口中还是在编辑器中?我试图在这两个地方都写定义,但都有错误。Franz还有一个IDE教程,其中第3节在Allegro CL启动后使用IDE for Lisp,其中说
“调试”窗口包含一个Lisp侦听器窗格,可在其中计算Lisp表达式,并默认显示打印输出。您可以通过在侦听器提示下键入表达式,然后按Enter键来计算表达式。(提示是窗口文本末尾类似“cg user(1):”的字符串。)
及
虽然侦听器可以随时输入简短的lisp表达式,但您需要使用编辑器
这些是cons的不同参数组合的输出。我刚开始学lisp。有人能帮我理解这些吗
Break 80 [81]> (CONS '(A) 'B)
((A) . B)
Break 80 [81]> (CONS '(A) '(B))
((A) B)
Break 80 [81]> (CONS 'A 'B)
(A . B)
Break 80 [81]> (CONS 'A '(B))
(A B)
Break 80 [81]>
cons函数总是做同样的事情:它生成一个包含参
如标题所述,我想打印我的全部功能
(DEFUN X () ...)
-> (DEFUN X () ...)
我需要在“…”中写什么?定义一个记录源的my:defun
拉尔斯的答案很聪明,用圆形结构来表示源中的源。对于一般的内省目的,另一个可能更有用的选项是定义一个特殊变量,该变量提供对所定义表单的访问。这是一个初始版本,但不是很完美:
(defpackage #:introspective-common-lisp
(:use "COMMON-LISP")
(:shadow "D
我有以下两门课:
(defclass person () ())
(defmethod speak ((s person) string)
(format t "-A" string))
(defmethod speak :before ((s person) string)
(print "Hello! "))
(defmethod speak :after ((s person) string)
(print "Have a nice day!"))
(de
我试图在Lisp中反转一个列表,但得到了错误:“错误:20303FF3处的异常C0000005[flags 0]
{偏移量25内#}
eax 108 ebx 200925CA ecx 200 edx 2EFDD4D
esp 2EFDC8 ebp 2EFDCE0 esi 628 edi 628“
我的代码如下:
(defun rev (l)
(cond
((null l) '())
(T (append (rev (cdr l)) (list (car l)
各位,
我试着做一些计算并绘制结果,但这些对Maxima来说似乎太重了。当我试图计算N1和N2时,当参数j过高或我试图绘制它们时,程序崩溃,程序显示以下错误消息:“堆耗尽,游戏结束。”我该怎么办?我见过一些人说尝试用ccl编译Maxima,但我不知道怎么做,也不知道它是否有效
我通常会收到如下错误消息:
Message from maxima's stderr stream: Heap exhausted during garbage collection: 0 bytes available,
在Paul Graham的书中,Lisp,第66页,我们有以下功能:
(defun compose (&rest fns)
(if fns
(let ((fn1 (car (last fns)))
(fns (butlast fns)))
#'(lambda (&rest args)
(reduce #'funcall fns
:from-end t
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 64 页