为什么公共Lisp数组语法不计算其参数:
(let ((a 1)) #2A((a 2) (3 4)))
=> #2A((A 2) (3 4))
我会猜它是#2A((12)(34))。这是因为A在读卡器时间不可用吗?简而言之,是的
#2A((a2)(34))不是(make array'(22):初始内容(list(list)(list a2)(list 34))的缩写(“语法糖”)。如果有的话,它可以合理化为(make array'(2 2):初始内容(quote((A 2)(3 4)),
Lisp中的回指条件句是什么?请解释一下代码 保罗·格雷厄姆的书中有一章是关于
本质上,它是一种编写语句的简写方法,可以避免重复代码。例如,比较:
(let ((result (big-long-calculation)))
(if result
(foo result)))
及
其中,it是一个特殊名称,指的是刚刚在(大-长计算)中计算的内容。一个例子是常见的Lisp循环:
(loop for item in list
when (general-predicat
如何使用lisp获取mp3文件的艺术家
(let ((in (open "test.mp3" :direction
:input
:element-type '(unsigned-byte 8))))
(when in
(loop for line = (read-byte 'utf-8 in)
while line do (format t "~a" line ))
(close in)))
本书介绍了完整的ID3(MP3标
我试图编写一个函数,比较两个列表,看看它们是否代表同一个集合。也就是说,‘abcdd’和‘dcbdad’代表同一个集合。元素可以是任意顺序
这就是我所拥有的,有效的:
(defun samesetp (list1 list2)
(cond
((null list1) (null list2))
((eq list2 (remove (car list1) list2 :count 1)) nil)
(t (samesetP (cdr list1) (remove (c
几乎每一位LISP爱好者都声称,该语言的一个关键优势是它可以适应问题,而不是将问题适应于该语言。我正在寻找现实世界中的例子,说明这在简单的商业软件或web应用程序领域是如何实现的。还有什么比DSL更重要的吗?是否有足够复杂/不明显的例子
PS:为什么我不能在标题中使用'problem'?是Paul Graham网站上的lisp应用程序列表。该页面包含来自许多不同领域的产品/公司
除此之外,雅虎!商店是基于lisp的(Graham的产品被雅虎收购)。谢谢罗伯特指出
我想下面的stackoverfl
我在使用unixODBC从openbsd盒连接到sql server数据库时遇到问题。当我使用isql时,我很好地通过了:
$ isql localProdSqlServer jegdemir GBE#oct
+---------------------------------------+
| Connected! |
| |
| sql-statement
我想用CommonLisp做一些同步的web编程,我正在收集选项。其中之一是“为AJAX/Comet定制的HTTP服务器”。文档似乎有点缺乏,因为我能找到的唯一一篇文章告诉你
子类服务器,并将APPLICATION-FINDER-FN插槽设置为回调
这将生成您的内容
似乎没有任何关于回调应该是什么样子的注释或示例(一些prodding告诉我,它应该期望一个服务器和一个连接作为参数,但没有关于它应该返回或执行什么操作的说明)
将其设置为类似于
(lambda (server conn) (decl
当我在Common Lisp中定义函数时,如下所示:
(defun foo (n)
(declare (type fixnum n))
(+ n 42))
我期望像(foo“a”)这样的调用立即失败,但它在调用+时失败。declare表单不保证静态类型检查吗?声明只是对编译器的提示,因此它可以生成更高效的代码。换句话说,它不是静态检查。类型声明传统上是用来作为编译器优化目的的保证。对于类型检查,请使用检查类型(但请注意,它也在运行时进行检查,而不是在编译时进行检查):
也就是说,不同的
我想问,是否有可能在鸡只计划中设立db;类似于此:
如果是,那么我必须读取/搜索哪些谓词?我应该用鸡蛋吗?
在鸡肉维基中,我进行了搜索,但没有找到我搜索的内容。是无法在scheme中实现上述内容,还是以完全不同的方式实现?这是可能的,但您需要使用另一种数据类型
与Common Lisp(该书重点介绍)不同,Scheme没有plists,因为它们缺少:keyword包。您需要决定如何存储数据,该决定将影响您构建make-和select等价物的方式。例如,如果您认为alists是一个足够好的替代品
我已经完成了上面的代码,当我尝试时,fact(4),它给了我ans是6。我不确定出了什么问题。有人能帮我吗 更改为
(defun fact (n)
(do
((i 1 (+ 1 i))
(prod 1 (* i prod)))
((equal i n) prod)))
基本上,您只进行了一次不必要的迭代。更改为
(defun fact (n)
(do
((i 1 (+ 1 i))
(prod 1 (* i
可能重复:
我只是想把‘abcde’变成‘abcde’
i、 例如,将内部列表的每个成员插入外部列表,同时保持元素的顺序
要做到这一点,必须有一个简单的方法,但不知什么原因,我找不到。你看到‘a b c d e是一棵树,不是吗?差不多
a---b
|\--c--d
\--e
在此表示中,节点是列表,叶是符号。
你能做的是,它打印出树的所有叶子:
如果树为空=为空列表,则停止
如果树不是空的,那么
如果树的汽车是一个符号,请打印它,然后处理树的CDR
如果树的车是列表,则处理树的车,然后处
我正在用XLISP编写一个程序,它需要我询问用户输入。我用过C语言,它相当简单,但我对LISP,尤其是XLISP还不熟悉,这使得为它寻找合适的东西有点困难。我想在XLISP中编写的内容如下:
scanf("Enter your position: %d %d\n",pos1,pos2);
如何在XLISP中写入此项?最基本的功能是带有程序块(指令列表)的函数输入位置,例如:
(输入可能需要通过辅助函数进行消毒,但这是故事的另一部分)
这两个变量pos1和pos2将具有“词法范围”,因此它们在e
我正在学习这个计划,并用一些例子来说明它的工作原理
我正在使用Eclipse的鸡肉解释器
尝试运行以下代码时:
(define (bottles n)
(if (= n 0)
'burp
(begin (verse n)
(bottles (- n 1)))))
(define (verse n)
(show (cons n '(bottles of beer on the wall)))
(show (cons n '(bottles o
我从康拉德·巴尔斯基的《Lisp之地》一书中学习Lisp。现在我遇到了我的第一个绊脚石,作者说:
用这种方式称呼自己不仅在Lisp中是允许的,而且通常是不允许的
极力鼓励
显示以下示例函数以计算列表中的项目后:
(defun my-length (list)
(if list
(1+ (my-length (cdr list)))
0))
当我用一个包含一百万项的列表调用这个函数my length时,我得到一个堆栈溢出错误。所以,要么你永远不会期望在Lisp中有这么长的列表
在Common Lisp中,是否有方法从alist中检索与给定键匹配的所有条目?如果您有一个关联列表a:
(defvar a '((a 1) (a 2) (b 1)))
通过调用remove if not(如果不是),可以保留所有具有a汽车的配对:
(remove-if-not (lambda (x) (eq (car x) 'a)) a)
这导致:
((A 1) (A 2))
即使将其视为assoc列表,也只会返回其中的第一个列表
(remove 'a '((a 1) (a 2) (b
在Common Lisp中,什么是事实上的可移植外部程序调用库
我找到了两个这样的图书馆
执行人
外部程序
还有其他东西吗?新版本的ASDF附带了运行程序(请参阅)
在ASDF3中,有一个专门用于此类可移植性实用程序的包,称为uiop
我不知道逗号是怎么起作用的
中有一个使用逗号的示例
在我看来
(let ((parms '(x y)))
``(beg ,,@parms end))
扩展到或等同于
`(beg ,x ,y end)
它是如何扩展到这一点的
我在想,如果我计算双反引号表单,它会导致第二个逗号起作用,结果是:
`(beg ,<splice stuff here> end)
它可能会说:“我不知道在反向报价之前拼接东西意味着什么。永远不要再这样做。”
但不知何故,口译员并不抱怨,只是选择这样做
如果其他地方已经回答了这个问题,我提前表示歉意,但是我似乎找不到对我所遇到问题的详细解释。这也是我的第一篇文章,所以
基本上这是一个家庭作业,然而,我不是在寻找一个解决方案,因为我已经看到了一个这样的工作解决方案。坦白地说,我想实现我自己的解决方案,这样我就可以学习了,因为我对lisp/scheme非常感兴趣。其思想是计算列表中有多少个0或任何元素/原子,然后显示/返回
我确信通过查看代码,很容易看到我的逻辑在做什么。我遇到的问题是每次递归时增加totalZeros变量。(+5 myNum)肯定
假设我有两个列表,((123))和((123))((45))。我想知道第一个列表是否是第二个列表的成员。我尝试使用subsetp,但对于此查询,它不会返回true。如何实现这一点?如果要将列表作为子TP的集合元素,必须更改:test关键字的值
CL-USER 1 > (subsetp '(1 2 3) '(1 2 3 4 5))
T
CL-USER 2 > (subsetp '((1) (2) (3)) '((1) (2) (3) (4) (5)))
NIL
第一个给T,第二个给零
我正在尝试用lisp编写一个函数,它有两个参数,一个是函数F,一个是列表L
如果我用“'>代替F,列表L是“(12345),它将返回5,因为5是最大的。
如果我们放入“
我正在测试中的代码
由于行为不同,我想知道SBCL是否使用了上述警告将行为更改为它认为用户更可能期望的行为?预期:
TEST> (defun literal-cons ()
(let ((cons '(1 . 2)))
(incf (cdr cons))
cons))
LITERAL-CONS
TEST> (literal-cons)
(1 . 3)
TEST> (literal-cons)
(1 . 4)
TEST>
使用format可以使用~S和~A
虽然~S中的S代表S-expression,但~A中的A代表什么?显然,它输出时没有逃逸,但我想知道这个字母到底是什么意思…?它代表美学未转义格式化的输出。看
顺便说一句,S代表标准而不是S-expression。我投票将这个问题作为离题题来结束,因为这表明没有任何研究成果,相关文档的标题对此进行了回答。尽管我是这个问题的作者,但我必须同意。我没有想到超规范,也没有想到如何用谷歌搜索这个术语。也许我应该多考虑一分钟。对此很抱歉:-(这是一个诚实的错误,事后来看
在Common Lisp中,我可以使用#“语法传递函数,如下所示:
(let ((x #'+))
(funcall x 1 2))
(flet* ((x #'+)
(y #'*))
(pprint (x 1 2))
(pprint (y 3 4))
(pprint (x (y 2 3) 4)))
但是假设我想设置一个函数,这样我就不必为它使用funcall。Common Lisp是否有一个本地函数名表,或者仅仅是通过defun分配给
我(仍然)在将代码从franzlisp移植到commonlisp。现在,我似乎把翻译推进了一个奇怪的角落,在那里它爆炸了
[11]> (setq fff (cadr contextstack))
*** - Program stack overflow. RESET
那怎么会导致堆栈溢出呢?递归在哪里
我可以选择长度确定:
[12]> (length contextstack)
79
描述工作原理。这只是长时间“描述”输出的开始
[13]>(描述(cadr上下文堆栈))
我想写一个使用这个bubbleUp函数的排序函数
调用sort将输出以下内容:
>(排序’(54321))>(12345)
>(排序(64398))
> (3 4 6 8 9)
但我只想使用LISP函数:defun、cond、car、cdr、list、cons、append、>、=、,据我所知,您必须再次应用冒泡(这是一种更简洁的函数命名方式),直到(应用#' (1 3 4 6 8 9 10 12)
但是请注意,我不是一个非常有经验的Lisp程序员,而且这段代码非常低效。如果您真的想对列表进
我有包含其他列表的列表(仅2级)
如何从包含一些对的列表中删除列表,第一个位置上的2个元素的相同组合和列表中的第二个位置或第三和第四个位置(在我的示例中为“SU”),并返回((SU S R)(SU R))
我需要改变
((susr)(susr)(surr))to=>((susr)(surr))
((su R S U)(su S R)(su R))to=>((su R S U)(su S R)(su R))-不要更改,因为这里有两次或两次以上的对有su、rs、U和no su
小心:
(subseq
我正在寻找的程序,可以为我生成一个lisp程序中每个函数的代码行统计信息。在Lisp中,这意味着每个函数或宏都要计算顶级函数中递归包含的函数数
任何指针都将不胜感激
为每个函数或宏计算顶级函数中递归包含的函数数
我不知道这意味着什么
如果要计算代码中函数调用的数量,则需要一个完整的函数调用
然而,对于文件中顶级表单数量的简单含义来说,这个问题相当容易处理。
我不知道有哪一个现有的项目能做到这一点,但这听起来并不难:
(defun read-file-as-string (file-name)
那么,下面的代码
(取消读取8位行(路径)
(打开文件时(流路径:元素类型'base char:外部格式:ascii)
(环路
对于行=(读取行流nil)
边线
收集线)
以字符串列表的形式读入文件,字符串类型为SIMPLE-ARRAY-CHARACTER。我想要的是SIMPLE-BASE-STRING。我可以通过强制执行:
(取消读取8位行(路径)
(打开文件时(流路径:元素类型'base char:外部格式:ascii)
(环路
对于行=(读取行流nil)
边线
收集(强制行“简单基字符串
我有一张单子
'((1 2 (A B C)) (2 3 (B C D)) (4 5 (C D F)))
我想处理内部列表中的元素,在本例中,我想将abc和其他列表更改为M
我编写了一个代码进程lst,它将为内部列表执行此任务
(defun process (lst)
(cond
((null lst) '())
(T (cons 'M (process (cdr last))))))
当我从主函数调用时
(defun iterate-list (lst)
(cond
我的口齿不清,说不出是好是坏。似乎每个使用过Lisp的人都喜欢它,然而现在最流行的语言是C语言的后裔
那么Lisp有什么了不起的地方,为什么它没有被更多地使用呢?Lisp有什么不好的地方吗(除了不断增加的括号)?这里有一些有用的链接:
(一些快速要点)
(起步缓慢,但重点突出)
(一整本书)
这本书涵盖了他喜欢Lisp的原因。底线是短语“可编程编程编程语言”——根据您的领域或首选风格定制语言的能力。Lisp是编程语言的Chuck Norris
Lisp是衡量其他语言的标准
了解Lisp说明了
封面画到底是关于什么的?我的意思是,我知道“eval”、“apply”和“λ”都是什么意思,但我很难理解图片的其余部分
这姑娘究竟是谁?她为巫师工作吗?她为什么指着桌子?她是指那个碗状的东西吗?还是书?还是整个桌子?她是否试图告诉向导他应该对表或表上的项目应用某种Lisp向导?还是她只是告诉他一些平淡无奇的事情,比如他的食物变凉了
那张桌子上的一条腿到底是什么样子的…一条腿…末端有一只脚(腿通常都有)?这张桌子单腿是如何保持平衡的?(或者那是阴影中的另一条腿?)
[注意:我正在等待一个漫长的构建
有没有办法检查Scheme中是否存在变量?即使执行(if variable)或(null?variable)之类的操作也会导致错误,因为变量未定义。是否有返回变量是否存在的函数?根据R6RS,调用未绑定变量是违反语法的
但是,根据您的实现,应该有一种方法(至少在理论上)来查询环境并检查变量是否是成员。然而,你需要做一些进一步的阅读
这里有一个关于球拍的例子:
#lang racket
(define x 1)
(define-namespace-anchor ns)
(define (is-b
编辑:解决方案是在第一个(let…)表单中将“(1)替换为(列表1)。这是因为我试图修改文字数据。谢谢你的帮助!(我会放弃投票,但显然你需要15个声誉…)
这是我在这个网站上的第一篇帖子
今天我在解决一些问题时,在Common Lisp中遇到了一些意想不到的列表排序行为(至少对我来说是这样):
我有一个函数,可以找到一个数x的所有适当因子:
(defun divisors (x)
"Finds all of the proper divisors of x."
(let ((sq
这是一个非常简单的方案函数
(define member?
(lambda (a lat)
(cond
((null? lat) #f)
(else (or (eq? (car lat) a)
(member? a (cdr lat))
))
)
)
)
但是,当我在vim中按下、d或、F来运行此功能时,出现了一个错误
/home/oo/tmp/t.scm:64读取错误:
我正在努力扩展并学习lisp。其中一个基础是实现一个简单的堆栈。除了我的pop功能外,一切都正常
;Returns and removes the first element of the stack
(defun my-pop ()
(let (temp (car *stack*))
(setq *stack* (cdr *stack*))
temp))
这将正确删除堆栈的“顶部”,但不会返回它。早些时候,我有一个:
;Returns and removes the
我想编译并运行一个80年代用T编程语言(Lisp的一种方言)编写的程序。我检查了,但它似乎只适用于VAX机器(和附带的编译器)
有没有什么适合T的现代CMPILER?或者一些兼容的现代方言?这列出了T已移植到的以下平台:
Ultrix(vax)
阿波罗域名/操作系统(m68k)
HP/UX(m68k)
Mac/AUX(m68k)
下一个(m68k)
SunOS 3(m68k)
SunOS 4及以上版本/Solaris(sparc)
Encore Multimax(n32k)
DEC3100(p
(car“abracadabra)相当于(car(quote(quote abracadabra)),其计算结果为(car(quote abracadabra))-->quote
另一方面,(car(引用(ab))的计算结果是a,这对我来说很直观
所以我的问题是,为什么Scheme不评估(car(quote(quote abracadabra))(即评估(car(quote abracadabra))到(car abracadabra)),而是评估(car(quote(ab))(即,为什么答案不
标签: Lisp
stack-overflowtail-recursionbignum
我尝试使用以下尾部递归函数进行求解:
(defun fib (num)
(labels ((fib-helper (num a b)
(cond ((or (zerop num)
(eql num 1))
a)
(t (fib-helper (decf num)
(+ a b)
从“lisp的温和介绍”开始:
如果给定循环列表,如#1=(a B C.#1#)作为输入,则长度可能
根本不返回值。在大多数实现中,它将进入一个
无限循环
这仍然是真的吗?这是一个bug吗?为什么不先检查一下列表的性质呢?一般用于处理序列;循环性问题与列表相关,但与字符串或数组无关。专门用于列表,并按预期用于正确的列表,但对于循环列表返回nil 在R7RS Scheme和Common Lisp等现代实现中,它们确实识别循环列表,但为了减少开销,CL既有长度,可能会挂起,也有可能在检测到循环时返回
我是lisp的新手。我没有正确理解如何在列表上实现append函数。我尝试了以下程序
(defvar temp)
(setq temp '())
(append temp (logxor 1 0))
当温度应该存储1时,它似乎只存储零值 返回新值,但不修改其参数。
您需要使用:
或者(这会添加到列表的开头,而不是结尾!):
返回新值,但不修改其参数。
您需要使用:
或者(这会添加到列表的开头,而不是结尾!):
(setq temp (append temp (list 1)))
(push
我正在尝试编写一个名为calculate的函数,它获取一个列表作为输入,并计算其值(用作lambda演算减缩器)
这是我的密码:
(defun substitue(x y z)
(cond ((atom z) (cond ((eq z y) x)
(T z)))
(T (cons (substitue x y (car z))
(substitue x y (cdr z))))))
(defu
嗨,我在Prolog中的一个简单的专家系统中工作,基于事实和规则
我遇到的问题是,我需要将prolog代码翻译成Lisp。我已经做了事实,但不知道如何做规则。我如何翻译这句话:
gimnosperms(Y):-植物(Y),带有种子(Y)。两种语言之间几乎不可能直接翻译,因为它们具有非常不同的语义
在lisp语言中定义函数,即“机器”,给定特定输入,产生特定输出
在Prolog中,您可以通过规则和事实定义具有不同用途的关系:
作为谓词,当您向它们传递一个或多个常量值时,查看它们是否满足指定的条件(
我阅读了8.5国外数据结构示例一章,发现有问题。
我使用以下示例来验证它是否可以正确运行。
_______________________________________________________________
或考虑一个外部C变量的例子和一些访问:
struct c_struct {
short x, y;
char a, b;
int z;
c_struct *n;
};
extern struct c_struct *my_struct;
my_
我下面的代码片段将给出SB-INT:SIMPLE-READER-PACKAGE-ERROR;
我知道这是因为在REPL读取代码时还没有定义包“quicklisp quickstart”;但是包是在“quicklisp.lisp”中定义的
如何使以下代码正常工作?
或者,我如何告诉公共lisp读取器这个包将在动态加载的文件中定义
* (let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
为了完成一个练习,我需要检查一个元素是否在列表中。我知道lisp中有函数成员,但我们的讲师非常严格,不允许我们使用课程中尚未涉及的内容
如果只使用cond、nil、car、not、cdr、+、equal、defun来检查原子是否在列表中,有什么方法
编辑:
在多塞克的评论之后;以下是一个尝试:
(defun presence (list item)
(cond
((atom list) nil)
((equal (car list) item) t)
(
我下载语义网络处理器项目:
接下来是读我的书,
通过使用CLISP解释器,我将目录更改为文件夹,
并执行以下操作:
[3]> (load "snp-loader.lisp")
;; Loading file snp-loader.lisp ...
;; Loaded file snp-loader.lisp
T
[4]> (in-package "USER")
<PACKAGE COMMON-LISP-USER>
[5]> (snp-load-everyth
公共口齿不清
我试图确定给定列表中是否存在字符串
我的目标是
(会员搜索字符串我的列表)
但是我总是得到零
为什么(成员“foo”(“foo”“bar”)返回NIL
这是因为(eql“foo”“foo”);=>无。虽然CLHS中没有记录,但使用#eql作为标准测试。为了使它能够使用同样计算结构的#'equal
(equal "foo" "foo") ; ==> t
(member "foo" '("foo" "bar") :test #'equal) ; ==> ("foo" "ba
在我的代码中,符号必须区分大小写:
(eq 'p 'P)
nil
所以我补充说:
(setf (readtable-case *readtable*) :invert)
在文件的开头,它工作得很好
但我也必须用两个符号做一个符号(合并它们)
为了“合并”两个符号,我找到了以下函数
():
有效但无法维持案例:
CL-USER> (symbol-append 'K 'm)
KM
如何在维护案例的同时合并两个符号
编辑
“某个符号”成功了,但我不得不后退
(setf (readtable
如何让它像这样工作:(读取列表在某种程度上就像读取字节一样工作:
1.返回读取(并在此处解析)的值
2.更改流位置(此处为列表))
或者更确切地说,你是如何处理这类任务的?您是否将列表转换为其他类型?我不太确定您想要的是什么,但这里有一个创建“列表阅读器”对象的函数(只是一个函数)。列表阅读器将允许您读取列表的块,将其视为一个流
(let ((obj)
(data))
(setf data '(1 2 3 4 5 6 7 8)
obj (foo (make-ins
所以我可以这样做:
(defparameter*某些函数*…;稍后返回lambda
或者这个:
(取消某些功能…
使用任一选项,我都可以使用funcall:
(funcall'某些函数…
或
(funcall*某些函数*
使用defun版本,我还可以执行以下操作:
(某些功能…
我无法使用defparameter函数实现这一点
defparameter为以后将某些函数重新分配给不同的函数(或任何其他函数,包括非函数数据)提供了更简单的技术
但是,除了这两点之外,还有什么其他的考虑因素是使用一个而
1 2 3 4 5 6 ...
下一页 最后一页 共 35 页