Lisp 这个xkcd代码是做什么的?

在《今日》杂志上,以下内容作为一个笑话出现在标签上 那么下面的代码是做什么的 (define (eval exp env) (cond ((self-evaluating? exp) exp) ((variable? exp) (lookup-variable-value exp env)) ((quoted? exp) (text-of-quotation exp)) ((assignment? exp) (eval-assi

在lisp中使用深度递归删除

如何使用深度递归实现remove函数 我知道如何在浅层递归中编写remove,但很难将其转换为深层递归 (myremove '(1 2) '(1 ((1 2) 3) (4 (5 ((1 2) 5))))) -> (1 (3) (4 (5 (5)))) 我想“深度递归”指的是树上的递归,而不是列表上的递归 更低级的答案是递归cons单元的car和cdr,而不仅仅是cdr。虽然我更喜欢使用高阶函数,但在本例中,递归调用mapcar: (defun myremove (item tree)

公共Lisp中的非关联符号

有好几次我遇到了不可理解的符号的概念,但我并不完全清楚它们是什么 有没有一种方法可以实习用(make symbol)创建的符号? 我可以在不插入符号的情况下为符号赋值吗? 是否可以重命名符号(内部或非内部)? 一个人还可以用一个不需要的符号做什么 更新: 这段代码中的符号发生了什么变化 CL-USER> (defun func () (let ((var 'sym)) (print (find-symbol "sym"))

LISP If语句-解析文本文件

我参加了一个复习各种语言的课程,我们正在用Lisp构建一个文本解析器。我可以让我的Lisp程序对数字执行许多不同的功能,但我正在努力处理文本。我只想偷看一行中的第一个字符,看看它是否包含

lisp中的好风格:cons vs list

在成对的事情上使用cons是一种好的风格,还是坚持列表更可取 例如问题和答案: (list (cons "Favorite color?" "red") (cons "Favorite number?" "123") (cons "Favorite fruit?" "avocado")) 我的意思是,有些东西天生就是成对的;不需要能容纳两个以上的东西,所以我觉得犯人是自然的选

LISP编程考试复习

使用内置的map和zip函数,定义一个Scheme函数zipadd,该函数接受两个数字列表,并返回由添加在一起的相应元素组成的列表。您可以假设列表的长度相同。例如,(zipadd'(1234)'(456))是(579)。(不使用zip和map的正确解决方案将获得8分。) 我不知道该怎么做。我真的很想在明天考试前知道答案。有人能帮我吗?首先,Racket没有zip过程,尽管实现一个过程很简单: (define (zip lst1 lst2) (map list lst1 lst2)) 现在,

Lisp 教堂数字转换为int而不使用语言原语

是否可以在不使用add1等语言原语的情况下将教堂数字转换为整数表示 我遇到的所有示例都使用一个原语来取消对int的切分 例如: plus1 = lambda x: x + 1 church2int = lambda n: n(plus1)(0) 例2: (define (church-numeral->int cn) ((cn add1) 0)) 我正在试用micro lisp编译器(仅使用John McCarthy的10条规则),并想了解这是否可以在不添加原语的情况下实

Lisp 过程按预期工作,但仍会显示错误消息

我一直试图通过《计算机程序的结构和解释》一书来学习编程。为了做这些练习,我一直在使用DrRacket(我找不到适用于Windows 7的scheme解释器,DrRacket看起来相当不错),到目前为止还没有任何问题。但在做练习1.22时,我遇到了一个问题。我编写了一个过程,给出了一个给定数量(n)大于a的素数: 该过程按预期工作,显示了它应该显示的所有内容,但在显示“结束”后,将显示以下错误消息: 应用:不是一个程序; 应为可应用于参数的过程 鉴于:# 论据。。。: # 并突出显示以下代码行:

Lisp 检查正确的子集

我需要一个函数,可以检查列表a是否是列表b的适当子集。到目前为止,我的代码是: (defun proper-subset (a b) (cond (( or (null b)(null b)) nil) ((equal a b) nil) ((find (car a) b) (proper-subset (cdr a) b)) ) ) find检查a的每个元素是否在b中。我知道空参数也需要一些工作,但我正试图找出如何确定a的每个元素何时在b中找到,以及b是

有人能帮我跟踪这个LISP表达式的执行吗?

我要计算的表达式是: (CONS(汽车L1)(列表(CDR L2))) 我已将其追溯如下: L1 = ((A B) C D) L2 = ((E) F) 或者(我不确定这是否更具可读性,但我已经按了太多次空格,现在无法退出): 这是正确的吗?似乎括号太多了,但也许我只是有点偏执 我找不到这样的嵌套列表,所以我真的不确定我是否做对了 谢谢,这是不正确的。让我们再试一次 (car'((a b)c d))是基准(a b) (cdr'((e)f))(与(cdr'((e)。(f)))是基准(f),意思是(

Lisp 在Racket和Racket SDL中初始化SDL矩形

我通过编写SDL应用程序来学习Racket,但我不知道如何初始化矩形结构。它在racket sdl中的定义如下: (define-cstruct _SDL_Rect ([x _int] [y _int] [w _int] [h _int])) 如何创建矩形的实例?具体来说,我想创建一个矩形作为最后一个参数传递到以下函数: (SDL_BlitSurface hello-world-surface #f screen-surface #f) 首先,如果您刚开始使用Racke

Lisp (a(b.c)d)在方框符号中的正确表示是什么?

我正在做Paul Graham的ANSI Common Lisp中的练习。我有一把其他人练习的钥匙,那就是: 在完成了第三章的练习后,我参考那把钥匙逐一检查我的答案。当谈到(a(b.c)d)时,我发现我无法理解Shido的答案,即: 真正让我困惑的是,在他的回答中,d后面没有紧跟着nil 那么他的答案正确吗?(a(b.c)d)的正确表述是什么?回答此类问题的方法是让系统为您解答。不幸的是,正确地做到这一点需要理解CL打印系统是如何工作的,这并不是那么简单(事实上:我已经忘记了如何正确地做到这

数独表生成器故障,lisp

我的lisp代码的某些部分有问题。这是一个数独表生成器。它工作正常,直到该部分: (loop for e in entries do (if (and (not (member e sub)) (not (member e col))) (progn (setq choices (nconc choices (list e))) (print choices))) (if (= (length ch

Lisp 什么是;我的另一辆车是cdr;什么意思?

任何精通口齿不清的人能给我解释一下这个笑话吗? 我读过一些函数式编程语言的书,知道CAR/CDR表示地址/减量寄存器的内容,但我还是不太理解其中的幽默 //来自方案 Scheme的数据结构很少,其中一个是元组:”(first.second)。在这种情况下,car是第一个元素,cdr是第二个元素。此构造可以扩展为创建列表、树和其他结构。 这个笑话并不好笑。在Lisp中,链表元素称为CONS。由于历史原因,它是一个包含两个元素的数据结构,称为CAR和CDR。(一些常见的Lisp程序员更喜欢使用FIR

Lisp(CLOS)中插槽的访问问题

我有一个节点类,它有一个“element”槽,其中包含一个带有数字和一个字母的列表,例如: "(123b456) (定义类节点() ((元素:reader get元素) :writer set元素 :initform'() :initarg:element :文档“元素”)) 程序的一部分应该使用“元素”槽,将字母与其中一个数字交换,最后创建一个新的节点对象,将交换的列表作为其“元素”槽。我已经有了一个交换函数,它接收列表和该列表的两个成员,并使用rotatef函数交换它们 为了测试swap

eql的公共Lisp通配符

在公共Lisp中是否有一个通配符是任何atom的eql 也就是说,是否存在这样的通配符 (eql wildcard any-atom) 返回true?如果函数的参数是原子,则该函数返回true。否 EQL的目的是比较某些基本类型对象(数字、字符)的值是否相等,以及比较所有其他对象(符号、数组、conse、结构、流、CLOS对象等)的标识 因此,拥有与其他事物“相同”的事物是没有意义的。EQL的目的是使标识可测试。这件事和另一件事一样吗?但是,一个与所有其他已经不相同的事物相同的事物的目的是什么

Lisp 正确使用解构绑定

我正在进行如下解构绑定的实验: (destructuring-bind (a b) '(1 2) (list a b))) 当我在REPL中对此进行评估时,我得到: READ from #1=#<INPUT STRING-INPUT-STREAM>: an object cannot start with #\) [Condition of type SYSTEM::SIMPLE-READER-ERROR] 在上面代码的上下文中,这个错误对我来说没

Lisp 在format函数中使用列表的元素

我想做一些类似的事情: (setf list '(1 2 3 4 5 6)) (format t "~A some text here ~A ~A ~A more text here ~A ~A" list) 并且输出是 1此处有一些文字2 3 4此处有更多文字5 6 我如何在不调用(第n个1列表)(第n个2列表)等的情况下执行此操作?试试看 (apply #'format t "~A some text here ~A ~A ~A more text here ~A ~A" list) (应

LISP有哪些种类?

LISP的不同种类有哪些?它们之间最显著的区别是什么 今天最流行的方言是:,和 Clojure网站对这三者进行了比较和对比。口齿不清的顽固分子倾向于选择CL或Scheme。Clojure是“炙手可热的新事物”,是Lisp和Java的混合体 CommonLisp和Scheme都有大量的实现可供选择。Clojure有两个:和 这是1993年关于Lisp历史的演讲的重演: 它显示了Lisp语言从一开始(大约1958年)到1993年的交织路径 自1993年以来,我认为出现了以下显著的发展:

Lisp Scriptfu没有按照正确的顺序执行,为什么?

我正试图为GIMP编写一个基本脚本,但它似乎不想正常工作。在我做出选择后,它应该遵循以下顺序:降低活动层,展开选择2px,泛光填充(带前景颜色),升高活动层。最终的产品应该是一个纯色下面我的线在顶层。但在我编写的代码中,它跳过了活动层,但洪水会在顶层而不是底层填充。以下是我的代码: (define (quick-fill image drawable) (gimp-undo-push-group-start image) (let* ((layer (car (gimp-image-ge

Lisp SICP练习3.8-为什么程序有效?(我认为这与环境有关)

SICP中的练习3.8描述为: 当我们在第1.1.3节中定义评估模型时,我们说 计算表达式的第一步是计算其 子表达式。但我们从来没有指定 应计算子表达式(例如,从左到右或从右到右 左)。当我们引入赋值时,参数的顺序 对一个程序进行评估会对结果产生影响。 定义一个简单的过程f,这样计算(+(f0)(f1))将 如果+的参数从左到右求值,但 如果参数从右向左求值,则返回1 我编写了过程f,这样如果我先调用(fx),每当我再次调用f时,它总是返回x。但我不知道为什么它会起作用。我写的程序是: (def

Lisp 操作员#和#x2B;和#-in.sbclrc

有人知道+和-运算符在.sbclrc中的含义吗?我在手册里找不到它。 安装quicklisp后,我在.sbclrc中看到了#-: #-quicklisp (let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))) (when (probe-file quicklisp-init) (load

Lisp中的项目可视化

是否有一种工具可以生成图表(类似于使用Graphviz的Doxygen),但格式如下: 程序风格分布:确定哪种编程风格(功能性、面向对象、命令式或宏)主导软件包,并确定每个软件包的复杂性大小 类方法关系视图:可视化类和方法之间的关系(在Lisp中,类和方法是分开的)。目标是确定系统中可能独立或松散耦合的组件 通用关注点视图:有助于识别和定位与通用功能相关的交叉关注点。 类类型视图:有助于根据类的结构,更精确地根据属性与方法的比率,识别不同类型的类。 二氧化钛 有关颜色和形状的含义,请参阅

替换elisp中关联列表中的项

我在emacs lisp中有一个列表,如: (setq a1 '((:k1 . 1) (:k2 . 2) (:k3 . 3))) 我想把:k1的值改为10,比如(:k1.10)。我该怎么做 我尝试了(setf(assoc:k1 a1)'(:k1.10))-它不起作用。对于alists,您通常在旧的cons前面添加一个新的cons以“阴影”旧的值,如下所示: (add-to-list 'a1 '(:k1 10)) 执行此操作后,(assoc:k1 a1)将返回10 如果要“撤消”

Lisp cl who和格式

我正在尝试使用cl who生成以下html代码: <html> <body> <div id="cnt_1"></div> <div id="cnt_2"></div> <div id="cnt_3"></div> </body> </html> 但是我得到了以下输出: <html><body><divcnt_1></div>&

Lisp:生成10个随机整数的列表

这是我用CommonLisp做的第一个家庭作业的一部分 我们必须定义一个变量,表示从0到100的任意10个随机整数: 我不确定这里问的是什么。 我应该写:(setf var1'()) 然后,我们必须定义一个函数,该函数生成一个包含10个随机整数的列表,并返回一个包含这些数字的列表 这是我写的,但我的输出一直是零。您知道代码有什么问题吗: (setf *random-state* (make-random-state t)) (setf var1 '()) (defun randlist (v

Lisp 如何显式使用标准函数?

在下面的示例中,我遇到了与iterate和count标准函数的名称冲突: (defun svs-to-images (file) (with-open-file (stream file) (iterate:iter (iterate:for line #:= (read-line stream nil nil)) (iterate:while line) (line-to-image (iterate:iter (

理解常见的Lisp aref行为

我不明白为什么setf不能处理函数调用返回的数组引用。在下面的示例中,为什么最终调用失败 (setf arr #1a(a b c)) (defun ret-aref (a i) (aref a i)) (eql (ret-aref arr 0) (aref arr 0)) ;succeeds (progn (setf (aref arr 0) 'foo) arr) ;fails (progn (setf (ret-aref arr 0) 'bar)

Lisp 获取所有可能的x布尔值组合(球拍、方案)

我有个问题。如何在球拍中获得所有可能的x布尔组合?(在较低的语言水平上) 我需要这样的东西: 对于x=1 (名单 (列表错误) (列表正确) 对于x=2 (名单 (列表为假) (列表假-真) (列表为真或假) (列表为真) 对于x=3 (名单 (列表为假) (列表假-假-真) (列表假-真-假) (列表假-真-真) (列出正确与否错误) (列表正确-错误-正确) (列出正确与否) (列表正确) 等等 我不知道在球拍里怎么做 谢谢你 您要求的是列表中所有n大小的排列(不是组合!)(#t#f),允许

关于euler 4项目lisp程序的反馈

我刚开始学习CommonLisp,所以我一直在研究ProjectEuler问题。这是我的解决方案(有来自的一些帮助)。你们对风格的改变有什么建议吗?以及怎样使它变得更加口齿不清 ; A palindromic number reads the same both ways. The largest palindrome made ; from the product of two 2-digit numbers is 9009 = 91 99. ; Find the largest palin

为什么不是';没有“unquote”Lisp原语吗?

最近,我一直在思考Lisp的基础;我在网上读过几本手册和/或其他材料,包括P。‎格雷厄姆: 在Lisp的根中,quote被描述为一个将代码转换为数据的原语,从而引用它,但似乎没有一个等价的反向原语,即unquote原语。我认为这可能是eval的工作,但是eval经常在空词汇环境中运行数据,这并不等同于将数据更改回代码 因此,为什么没有一个unquoteLisp原语?unquote只在quasikote的上下文中有用,并且quasikote可以实现为一个宏(在幕后使用quote)。因此不需要使用u

Lisp 向量中字符串的相等性

我在elisp中定义了一个函数,用于查找向量中列表的索引: (defun vposition (e v) (letrec ((f (lambda (e v i) (if (equal e (elt v i)) i (f e v (+ i 1)))))) (f e v 0))) 如果我在数字上使用它就可以了,但是如果使用字符串,例如(vposit

Lisp 如何定义用于读取单词列表的函数

我想将包含单词列表(每行一个单词)的文件读入列表 (define (read-wordlist myFile) (begin (set 'listA '()) (set 'in-file (open myFile "read")) (while (read-line in-file) (set 'listA (append listA (list (current-line))))) (close in-file))) 此函数将文件读入列表l

Lisp 获取列表中elt的cdr

我使用了两种方法来构建基于cons单元的树 (defun make-tree (nodes) (cons nodes NIL)) (defun add-child (tree child) (setf (cdr tree) (append (cdr tree) child))) 然后我创建了4个参数: (defparameter *root* (make-tree "root")) (defparameter *a* (make-tree "a")) (defparameter *b

Common Lisp中langutil的问题-如何标记文件

我一直在尝试使用langutils库(我使用Quicklisp下载了该库)对字符串进行标记,我正在使用SBCL,但我遇到了一些问题。我一直在尝试使用以下代码: (cl实用程序:拆分序列#\Space(多值调用#')(lambda(a b c d)c)(标记化流(打开“hello.txt”))) 与输出 (“你好”,“你的名字”是什么。“我的名字”是“约翰·多伊”) 我的问题是:为什么langutils标记一个空格,为什么它不标记句点 另外,如果langutils有缺陷,那么在CommonLisp

CentOS 7上的通用Lisp

我正在寻找一种在CentOS 7中使用通用Lisp编译器的方法 base或EPEL repo似乎都不包含任何广泛使用的开源Lisp编译器。CentOS 6上有一些关于CLISP和SBCL的信息,但CentOS 7上没有任何编译器的信息 我是否在这里遗漏了什么,或者从RHEL6切换到RHEL7完全忘记了CL编译器?直接使用公共Lisp系统通常比使用发行版的包系统更好。软件包系统落后,Common Lisp的库模型不适合软件包 您可以从下载SBCL二进制文件 您可以从以下位置获得Clozure CL

LISP语言中的符号编程与软件包

给定以下函数,在REPL处输入: (defun animalp (thing) (if (member thing '(dog cat snail mouse)) t)) 问起来相当简单: (animalp 'dog) (animalia:animalp 'dog) 拆分成包后,事情变得更加复杂: (in-package :common-lisp-user) (defpackage :animalia (:use :common-lisp) (:export :animalp)

公共lisp:关键参数的使用

:KEY参数包含在Common Lisp附带的一些函数中。我发现所有关于它们的描述都没有任何帮助,而且在搜索引擎中很难搜索到:KEY,因为“:”通常被忽略 例如,在同时允许:TEST和:KEY的成员函数中如何使用它?在公共Lisp HyperSpec中的介绍部分中,在以及下以某种隐晦的方式记录了:KEY参数。这是因为它的行为在整个库中是一致的 非常简单,:key指定应用于正在处理的序列元素的函数。函数的返回值用于替换这些元素。在一些函数式语言的术语中,这称为“投影”。这些元素通过键函数进行投影。

Lisp 如何将超类对象传递给子类构造函数?

假设我有一个带有两个插槽的类A: (defclass a () ((a-1 :initarg :a-1) (a-2 :initarg :a-2))) 以及继承自A的类B: (defclass b (a) ((b-1 :initarg :b-1))) 如果我想实例化B,生成实例将为我提供插槽:a-1,:a-2和:B-1 这里有一个疯狂的想法:如果我想使用a的现有实例实例化B,并且只填充槽B-1,该怎么办 注:为什么有用:如果A实现了一些B直接继承的通用方法,而不添加任何新的内容。

Lisp 闭包通用:sbcl因标准可读表修改而损坏

我将quicklisp更新到2月份的最新版本,并为我正在开发的xlmanip工作簿/工作表阅读器重新运行了一些单元测试。SBCL阻碍了单元测试,因为它重新编译了closurecommon包,并且closurecommon修改了标准的可读表(实际上是一种很好的方式) 我的一个选择是分叉closure common代码库,希望维护人员实际响应补丁,并祈祷补丁被接受,遵循quicklisp中的clozure common依赖项,其中也出于同样的原因调用了SET-DISPATCH-MACRO-CHARA

无法使用Lisp中的列表创建列表

我正在尝试使用以下命令创建包含内部列表的列表,但该命令无效: (名单1、2、3(名单a、b、c)) ***-SYSTEM::READ-EVAL-PRINT:变量B没有值 我不确定这里哪一个是变量B 编辑:我重新启动了clisp并重试。这一次它是一个变量 $ clisp i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8

如何在lisp中实现存储在位邻接

我是lisp新手,我正在寻找一个函数来做一个存储在原地的邻接,有没有?我找到了pushnew宏,但它似乎对项目而不是列表有效 (pushnew '((1)) '((1) (1 2) (1 2 3))) (pushnew '(1) lst) => ((1) (1) (1 2) (1 2 3)) PUSHNEW是ADJOIN的修改版本。您需要使用适当的:TEST参数来比较列表包含的元素类型(例如列表的#'EQUAL) CL-USER> (defparameter *list* (lis

Lisp 修改plist内部列表?

我有一个列表,其中包括 '((:atom Toddler :visited nil :on-clauses (0 1)) (:atom Child :visited nil :on-clauses 1)) 如何更改给定的:atom上的:onclauses属性?我想更新此属性,例如制作第二个plist(:atom Child:visted nil:on子句(12))(仅添加新值,从不删除旧值) 我所能做的就是使用 (remove-if-not #'(lambda(record)

Lisp中余弦函数的泰勒级数

我试图在lisp中构建一个泰勒级数,如下图所示 1 + x^1/1! + x^2/2! + x^3/3!.....etc 为了在泰勒函数中使用幂函数和阶乘函数,已经实现了幂函数和阶乘函数 目前,我编写了以下初始代码来解决这个方程 (defun taylor(x n) (if (= n 0) 1 (+ (/ (power x n) (factorial n)) (taylor(x (- n 1)))))) 使用此代码将导致以下错误 错误:未绑定函数-X 我是lisp的新手,因此任何帮助都将不

LISP:SYSTEM::READ-EVAL-PRINT:变量I没有值

我做了一个简单的测试函数,试图通过调用测试j10为j赋值。 我得到SYSTEM::READ-EVAL-PRINT:变量J没有值 (DEFUN test (j i) (LET ((j i)) (print j) ) ) 我想你误解了这些论点的作用。测试函数的当前形式有两个参数:j和i。你似乎只使用i,所以没有理由通过第二个。考虑 (defun test (i) (let ((j i)) (print j))) 然后简单地称之为test 10。我不确定

Lisp-如何在另一个函数中调用函数?

我正在尝试调用以下函数: (defun c:Add () (setq a (getint "Enter a number to add 2 to it")) (setq a (+ a 2)) ) (defun LOOPER (func) ;repeats 'func' until user enters 'no' (setq dummy "w") (while dummy (func) ;this is obviously the pro

lisp中的字符串加法赋值

我有一个带条件的循环,根据这个循环,我决定是否应该向现有字符串中追加一些内容。 在Python中,它应该是这样的(这是伪代码,只是为了说明这一点): 输出:024 所以问题是:如何在lisp中对字符串(+=)执行加法赋值?字符串连接依赖于更通用的函数: (concatenate 'string "a" "b") => "ab" 由于有些人认为它过于冗长,因此可以找到实现较短版本的库: (ql:quickload :rutils) (import 'rutils:strcat) 然后:

如何使用ObjectDBX使用AutoLISP从所有块中删除所有属性

我想使用AutoLISP ObjectDBX方法删除图形中块的所有属性 下面的程序工作得很好:它删除图形中所有块的属性,但是当我在块编辑器中编辑此块时,我看到所有属性仍然存在 我想我需要从块的定义中删除这个属性 ;[dwgin]--input drawing file ;[dwgout]-- Output drawing fath with name ;function 'LM:GetDocumentObject' lee mac function to open drawing in Obje

Lisp 计算不以给定字母开头的单词

所以我用Lisp编写了这个函数,它计算列表中有多少单词不是以给定字母开头的。 但是我现在需要编辑它,在我的函数中不使用let,而是保留char和string。 感觉有点受阻,因为我已经开始口齿不清了没多久了,走吧!有人能帮我吗 例如: 其他人“艺术鼻子”脚鼻子保持沉默从不=>4 这就是我所做的,但需要删除let: (defun others (x liste) (let ((c (char (string x) 0))) (cond ((not liste) 0)

Lisp 什么';这是';和#';口齿不清?

似乎两者都有 (mapcar 'car '((foo bar) (foo1 bar1))) 及 照样工作 我还知道'表示(引号符号)和#'表示(函数名) 但根本的区别是什么?为什么这两个都在先前的mapcar中工作 为什么这两个都在以前的mapcar中工作 文件说明: 如果函数是一个符号,则它被强制为一个函数,就好像是由 计算为符号FOO #'foo 计算为绑定到名称FOO的函数 在Lisp中,当符号FOO具有函数绑定时,可以将符号作为函数调用。在这里,汽车是一个具有功能绑定的符号 但这不

上一页   1   2    3   4   5   6  ... 下一页 最后一页 共 64 页