你们觉得Clojure怎么样?我正在考虑下一步学习它,目前正在使用Erlang,并且总体上对它感到满意,除了唱片的惨败。。。
Clojure和LISP一样强大吗?我认为这个名字很聪明。Clojure是LISP的方言,所以,是的,它和LISP一样强大
正是因为这个原因,我们现在有了一个很好的用于JVM的LISP工具,我喜欢这种语言。“Clojure有潜力为面向并发编程做十年前Java为面向对象编程所做的事情:使正确使用一种语言(或者在Clojure的例子中是“语言环境”)变得更简单。”这与程序员已
我想用CommonLisp做一个宏,它应该接受它的一个参数,一个由插槽和字符串组成的列表。以下是原型:
(defclass time-info ()
((name :initarg name)
(calls :initarg calls)
(second :initarg second)
(consing :initarg consing)
(gc-run-time :initarg gc-run-time)))
(defun print-table (output
我正在使用LispWorks个人版,只能通过加载文件而不是通过初始化文件.LispWorks加载Quicklisp,LispWorks应该可以在我的主目录C:\Users\Me\中找到该文件。我是否将初始化文件放在了错误的目录中?还是有其他问题?个人版不加载任何初始化文件。文件中明确说明了这一点
LispWorks个人版的局限性如下所述:其中也包括sitelisp init文件?不过,请看一看。
如何在LISP中将实数转换为整数
有没有原始函数
例如:
3.0=>3有多种方法
我将使用f而不是下面的浮点数
如果您对下一个最高的整数感兴趣,(上限f)将为您提供该值。如果您对下一个最低的整数感兴趣,(f层)会给出该值(对于1.0之类的值,这两个函数将返回相同的整数值)。如果希望使用最接近的整数,可以使用(f轮)来查找它
这是我能想到的三种最简单、最便于携带的方法。另一种选择是截断。例子
> (truncate 2.2)
=> 2
0.20000005
> (trun
以独立于实现的方式在Lisp中移动文件的最佳方式是什么?例如,我有一个图像文件:
(setq oldpath #P"SERVER:PICTURES;TEMP;PHOTO.PNG")
我想把它从临时目录移到图片目录。这似乎有效:
(setq newpath
(make-pathname
:host (pathname-host oldpath)
:directory (butlast (pathname-directory oldpath))
:name (pa
假设我有以下函数:
(defun f (v1 v2) ...)
(let ((fun (curry #'apply #'f)))
(funcall fun '(a b)))
我想简化以下代码:
(lambda (pair) (apply #'f pair))
这里的目标是创建一个函数,该函数接受两个值的列表,并使用该列表的内容调用f。虽然这样做有效,但似乎有点冗长。有没有更简单的方法来表达这一点?也许:
(lambda(p)(apply #'f p)) ;; 24 bytes
更重要
我试图使用lisp检查另一个字符串中是否存在一个字符串。我尝试了以下方法:
(string<= "walk" "wall")
它给出:3
我需要做的是检查左手边^walk中的整个字符串是否在右手边,而不是子字符串,因此对于前面的示例,它应该给出false和with:
(string<= "walk" "walk on")
它应该是真的或4
请帮忙
在SBCL Common Lisp中提前感谢
(search "walk" "wall") -> NIL
(
我正在实现一个图形数据结构,它将任意对象存储为顶点。我想为获取对象的关键点定义一个接口,这样所有顶点都可以有一个关键点。在我看来,这听起来像是我可以在java这样的语言中使用接口的地方
界面顶点{
串键顶点v;
//等等。。。
}
如何在common lisp中模拟接口的行为?因为没有接口,因为有些语言使用它们,例如Java,所以您只需定义一些通用函数和可选的mixin类,以指定为实现类的超类。因为没有接口,从某种意义上说,有些语言使用它们,例如Java,所以您所需要做的就是定义一些泛型函数,并
假设我们有一个包含以下元素的列表:
(“苹果”“梨”“苹果”“香蕉”“梨”“苹果”)
如何确定最常见的元素是这个列表是“苹果”?问题相当广泛,因此下面是一个实用函数,它将元素分组到相同频率的包中。主要返回值是一个哈希表,其中键是正数(出现次数)和元素列表的值。所有这些列表构成了元素的一个分区。
第二个返回值是中频哈希表,它可能对调用者有用。您应该能够找到最频繁出现的元素
(defun frequency-bags (elements &key (test #'equal))
(let
我想写一个相等的函数,告诉你任意两个数字相等,一个符号只等于它本身。另外,如果两个列表的所有元素递归相等,则它们应该相等。我在下面写了一个小的相等函数,但它并没有完全实现我想要的
(defun equal (x y)
(if (atom x)
(eql x y)
(if (atom y)
'nil
(if (equal (car x) (car y))
(equal (cdr x) (cdr y))
我试图通过制作一个函数来更好地理解lisp中的多级列表,在这个函数中,我从多级列表中删除了所有不是数字的元素。我首先尝试用striv0函数将其展平,然后检查列表的第一个参数是否为数字。但是,我在尝试该函数时遇到了一个问题
func'5 2 87 95
. 如果没有值,则获取:COND:变量
守则:
(DEFUN striv0 (lis)
(COND ((NULL lis) NIL)
((ATOM lis) (LIST lis))
(T (APPEND (st
在Racket文档中有整数指针类型,如_intptr,但是如何使用动态C库中的float*呢?Racket有内置的_float和_doubleC类型表示,还有一个_指针类型。您可以将它们结合起来,将返回值视为C浮点指针
这是一个草图-根据需要修改以适应您的情况:
您的C函数:
float* my_float_returner() {
float* pi = malloc(sizeof(float));
*pi = 3.1415926535;
return pi;
}
和
我一直在学习Lisp来扩展我的视野,因为我听说它被用于人工智能编程。在做了一些探索之后,我还没有找到人工智能的例子或任何能使它更倾向于人工智能的语言
过去使用Lisp是因为它是可用的,还是我只是缺少了什么?我想一个重要原因是列表作为基本数据结构的灵活性
当时,由于能够将它们转换为各种复合对象,以及消息传递和polimorphism等新事物,使其成为首选语言;不是专门针对人工智能,而是针对大型、复杂的任务。尤其是当他们尝试概念时。我的猜测一直是,作为一种函数式语言,它不区分代码和数据。所有内容,包
是否有用于lisp的梨类库?我希望有,但我在某个地方读到lisp的缺点之一是缺少严肃的库。我觉得很难相信,因为lisp现在已经有半个世纪了 这是一个很好的起点。正如jlf所说,www.cliki.net是一个很好的起点。另外,请仔细查看asdf安装和clbuild。如果您使用的是linux,那么clbuild就像lisp库的包管理器。也值得一看。托管了许多lisp项目。许多可通过ASDF安装
另请参见。缺少CL库是一个神话
我可以推荐clbuild来管理您的库
使用cl-user.net查找特定
可能重复:
我目前正在努力精通CommonLisp,并学习用它编写简洁、清晰、漂亮代码的一些技巧
所以,我想知道你是否有好的通用Lisp的来源,最好是免费的和在线的,但是书也可以。实用的通用Lisp
完整的书(HTML)是免费的
大多数开源公共Lisp(CL)环境附带了大量CL源代码
看一看,然后
(公共LispWiki)有许多开源CL包
是另一个大型CL代码库。将语言设置为“Lisp”将返回CL和非CL文件,如Emacs Lisp(.el)文件。要缩小结果范围,请将“文件”文本框设置为.li
我正试图找出如何使用cons实现这一点:
((A.B.)(C.D))
其中(A.B)和(C.D)在每个cons单元中
我尝试过这样做(cons(cons'a'b)(cons'c'd)),但它给了我这个:
((A.B)C.D)
我也试过这个:(cons(cons'a'b)(cons(cons'c'd)),但它给了我这个:
((A.B)(C.D))
你知道如何做到这一点吗?我不太清楚你的意思。。。我同意上面的评论,即代码的最后一行与第一行相似,这是您要匹配的
无论如何,这里有一个不错的通用资源:只要
我已经阅读了SICP的第4章,刚刚发现第一节列出了实现评估器的最重要功能,eval和apply,我理解eval非常重要,但为什么apply如此重要呢?对于某些语言,完全没有像Javascript那样的apply
编辑:很抱歉,我错了,Javascript中没有应用程序,请忽略这一点。这是在表达式上运行函数的方式,也称为将函数“应用”到表达式
请注意此处的代码:
http://mitpress.mit.edu/sicp/code/ch4-mceval.scm (死链接)Apply对函数调用求值。它
正如标题所说,我想给lambda函数一个名称,以便稍后在代码中调用它
但我想将其关联到的名称是一个变量。我能做什么
(defparameter funct-name 'addone)
funct-name = (lambda (x) (x+1))
所以我的电话一定是这样的:
(addone 3)
funct name是一个变量,其中包含我要为lambda函数指定的名称
(setf (symbol-function funct-name) (lambda (x) (+ x 1)))
好的,我最近发布了一个关于在Scheme中创建递归函数的问题,该函数甚至可以生成从下面定义的列表中调用的函数:
(define list0 (list 'j 'k 'l 'm 'n 'o 'j) )
(define list1 (list 'a 'b 'c 'd 'e 'f 'g) )
(define list2 (list 's 't 'u 'v 'w 'x 'y 'z) )
(define list3 (list 'j 'k 'l 'm 'l 'k 'j) )
(define list4 (
简言之,有什么区别
(setq var1 `(,(get-internal-real-time)))
var1
-->(1358995178904535)
var1
-->(1358995178904535)
(setq var2 '(#.(get-internal-real-time)))
var2
-->(1358995195568422)
var2
-->(1358995195568422)
我认为“读取时间评估”可能意味着每次读取变量时它都会求值,但我猜我错了
就我的一生而言,我无法理解延续。我认为问题的根源在于我不明白它们的用途。我在书中或网上找到的所有例子都很琐碎。他们让我想知道,为什么有人会想要延续
这是一个典型的不切实际的例子,我相信这是一本公认的关于这个主题的书。在英语中,他们将延拓描述为对计算结果“做什么”。好吧,这是可以理解的
然后,给出第二个示例:
(call/cc
(lambda (k)
(* 5 (k 4)))) => 4
这有什么意义k甚至没有定义!当(k4)甚至无法计算时,如何计算此代码?更不用说,call
我无法找到cdr的时间复杂度分析。它是以恒定时间运行还是以线性时间运行?如果答案取决于lisp的实现,那么假设我使用的是Racket cdr在任何Lisp中都需要固定的时间。它只是查找cons单元格中的第二个成员。从C的角度考虑,lisp对只是一个struct,有两个字段,car和cdr。lisp函数car和cdr仅用于C访问每个字段
以下是一个关于:
注意联合体的这一部分:
struct { struct Scheme_Object *car, *cdr; } pair_val;
我想知道是否有任何方法可以用LISP中的指针模拟C的行为。在C语言中,如果更改指针指向的变量的值,则该变量具有全局效应(即,该值也将在函数外部更改)
所以如果我有
(defun mutate ( a )
(some-magic-function a 5)
)
a在调用mutate后会变为5,不管它之前是什么
我知道有列表的元素是可能的(很大程度上是一种副作用)
但我想知道如何为整个列表执行此操作。使用函数
如果要使用函数,必须传递符号本身:
(defun mutate (symbol
我是LISP新手,所以我不太擅长这个。。。所以我的问题是,我已经得到了一个结构(列表列表),我的工作是创建一个函数来检索每个子列表中的第二项(从0开始计数)。所以最后我想返回(水果代理码)
我可以执行遍历列表的基本递归调用,但我似乎不知道如何获取子列表中的第二项
名单结构:
(defparameter *jack*
'((orange#8 apple fruit basment)
(pear#12 mango fruit basment)
(jones rabbit agent closet)
在Python中,我们有删除变量的语句
例如:
这在Lisp中的等价物是什么
(setq foo 1)
;; (del foo) ?
用通俗的口齿不清
对于作为变量的符号:
CL-USER 7 > (setf foo 42)
42
CL-USER 8 > foo
42
CL-USER 9 > (makunbound 'foo)
FOO
CL-USER 10 > foo
Error: The variable FOO is unbound.
见:
未绑定(已
我自己在学习lisp,我不明白为什么会出现这个错误。
如果有人能帮我,那就太好了:
这是我得到错误的条件:
(cond ((equal c1 caracter) (push caracter pilatemp))
((or (equal c2 caracter) (equal c3 caracter) (equal c4 caracter) (equal c5 caracter) (equal c6 caracter))
((loop
(setf
我一直在遵循安装Lisp编码示例的步骤,但在尝试使用Allegro CL加载文件“aima.Lisp”时遇到错误“逗号不在反引号内”
这是文件的代码(未编辑的代码):
;;;-*-模式:Lisp;语法:Common Lisp-*-文件:
aima.lisp
;;;; 特定于供应商的定制
#+Lucid(setq*如果包中没有警告*nil)
;;;; 用于定义文件系统的最小工具
(defparameter“C:\Users\Aaron\Lisp\”
(truename“~/public\u htm
目前,我必须非常小心我的函数的顺序,否则,当我试图从另一个函数调用函数时,Lisp说该函数不存在,因为它稍后在文件中定义。有没有办法绕过这个问题?我可以在文件的顶部声明我的所有函数原型,以及下面的完整定义吗 及
可以使用全局声明某个对象具有某个函数类型。例如,如果您在SBCL中定义了调用未定义baz的foo1,那么首先会发生什么:
现在,让我们添加一个声明,声明baz是一个无参数函数,并返回一些东西。如果愿意,您显然可以添加更多的类型信息,但这至少可以提供arity和baz是函数的知识
CL-U
我现在正在学习CommonLisp,到目前为止,我已经听到很多关于人工智能的提到。似乎Lisp是一种适合编写此类工作人员的语言。所以我想尝试一下,但有一个问题:怎么做。你能提供一些来源和链接来解释WTITINGA的原理吗。我谢谢。试着为彼得·诺维格(Peter Norvig)读一读这本好书,里面有一些在人工智能领域使用的流行技术的常见Lisp示例,如问题解决、路径查找、符号计算和一点NLP。请注意,这本书很旧,并且使用ansi Lisp之前的语言编写了示例代码,因此有时需要进行更改才能在现代系统
我必须用Lisp编写一个简单的程序,将多项式乘以某个因子。在这个例子中,我想乘以(x+5)*5x。答案应该是5x^2+25x
当我输入((11)(50))(51))时,我应该得到(52)(51)。然而,我遇到了各种各样的错误,从(TERM)中的未定义的运算符TERM到糟糕的绑定形式。我是Lisp的新手,试图返回一个列表,如上图所示。下面是我的一小段代码:
(defun get-coef (term)
(car term))
(defun get-power (term)
(cadr t
我正在编写一个名为flatte的函数,该函数将获取包含嵌入列表的列表并返回其简化版本。当我尝试执行我的函数时,我得到一个错误,声明“带点的Lambda列表只允许在宏中使用,不允许在这里使用:list”关于如何解决这个问题,有什么建议吗
这就是我目前拥有的
(defun flatten list
(cond
(null list)'()
(list (first list))
(append (flatten (first
问题是:我有这样一个列表:
(((1 2) (3 4) (5 6)) ((7 8) (9 0)))
.......
1 2 3 4 5 6
7 8 9 0
......
我必须把它写在一个文件中,每个列表中的数字都打印在这样一行中:
(((1 2) (3 4) (5 6)) ((7 8) (9 0)))
.......
1 2 3 4 5 6
7 8 9 0
......
……意味着我可以拥有更多列表。我想知道如何在不使用循环和使用打开文件、格式和递归的情况下实现这一点。在每个数字之间有
问题:
Define a LISP function SCORE->GRADE which takes a single argument, s, and returns a symbol according to the following scheme:
s ≥ 90 A 73 ≤ s < 77 C+
87 ≤ s < 90 A– 70 ≤ s < 73 C
83 ≤ s < 87 B+ 60 ≤ s < 70 D
如前所述,我试图通过实现lisp来自学lisp
我基本上没有使用lisp的经验,所以在js中微不足道的工作对我来说是陌生的
例如,我正在研究一个..chunk方法的实现,它在js中采用一个数组和一个size变量,并按大小“chunk”数组:
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'],
我试图创建一个列表数组,其元素为:姓氏、姓名和年龄
以下是我在AutoLISP中的代码:
(defun C:DP_ADINREG ( / prenume nume varsta inreg)
(initget 1)
(setq prenume (getstring "\nIntroduceti prenumele: "))
(initget 1)
(setq nume (getstring "\nIntroduceti numele: "))
(initget 7)
(setq v
我正在阅读一本lisp书,我正在看mapcar,我的问题是为什么这是有效的:
>地图车“+”12“3 4
但这不是:
地图车+'12'3 4
换句话说,是否有理由在lisp中决定mapcar的第一个参数不能是函数本身,而必须是它的名称?这有什么用?'+是一个函数。Common Lisp被称为“Lisp 2”,这意味着它有两个名称空间:在计算复合形式(如+a b)时,函数位置在函数名称空间中查找,而其他位置在值名称空间中查找。这意味着,例如,append list不会生成两个元素都是list函数的
我知道算法:
(defun Hanoi (n) (if (= n 1) 1 (+ (* 2 Hanoi(- n 1)) 1)))
然而,克里普说
*** - IF: variable HANOI has no value
我怎么能调整这个?我找不出问题。在Lisp中,你不把函数称为f(x),你把它们称为(fx),所以你对河内的递归调用需要是(hanoi(-n1))在Lisp中,你不把函数称为f(x),你把它们称为(fx)因此您对河内的递归调用需要是(河内(-n1))以下是您的代码:
(def
我的口齿不清,说不出是好是坏。似乎每个使用过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读取错误:
我想编译并运行一个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))(即,为什么答案不
嗨,我在Prolog中的一个简单的专家系统中工作,基于事实和规则
我遇到的问题是,我需要将prolog代码翻译成Lisp。我已经做了事实,但不知道如何做规则。我如何翻译这句话:
gimnosperms(Y):-植物(Y),带有种子(Y)。两种语言之间几乎不可能直接翻译,因为它们具有非常不同的语义
在lisp语言中定义函数,即“机器”,给定特定输入,产生特定输出
在Prolog中,您可以通过规则和事实定义具有不同用途的关系:
作为谓词,当您向它们传递一个或多个常量值时,查看它们是否满足指定的条件(
为了完成一个练习,我需要检查一个元素是否在列表中。我知道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
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 64 页