我一直想自学口齿不清有一段时间了。然而,我听到的所有口译员都涉及到一些emacs风格。
是否有任何命令行解释器,以便我可以在命令行中键入:
lispinterpret sourcefile.lisp
就像我可以运行perl或python一样
虽然我也希望更加熟悉Emacs(如果我不想在与使用Emacs的人一起工作时感到沮丧的话),但我宁愿将学习Emacs与学习Lisp分离
编辑:我实际上想了解使用Scheme的SICP,所以关于Scheme的答案会更有用。我只是不太熟悉它们之间的区别。保罗·格雷
从未使用过lisp,所以在阅读本文时,不要认为我太笨。但是,
lisp今天用于什么
我知道该语言存在多种变体,至少有一种变体可以让它在商业上存活一段时间(AutoLisp、VisualLisp-Autodesk提供了相当大的支持)。。。但我并没有遇到每天都在使用它的人。因此,如果你能解释一下这件事:
它现在的主要目标市场是什么
你认为它的未来会是什么?。。它是否会成为少数应用程序中的另一种支持语言,或者它会走向何方
此外,除了"不能说出姓名的编辑",
还有哪些应用程序将其作为支持语言
我想写一个程序,在Scheme中求二次方程的根。我使用LET进行某些绑定
(define roots-with-let
(λ (a b c)
(let ((4ac (* 4 a c))
(2a (* 2 a))
(discriminant (sqrt ( - (* b b) (4ac)))))
(cons ( / ( + (- b) discriminant) 2a)
( / ( - (- b) discri
我知道Lisp有几种不同的方言。既然已经决定学习Lisp将是一种新的智力体验,我想知道学习哪种Lisp方言,以及为什么
有一种比其他的更受欢迎吗?其中是否有一个更“完整”,如中所述,有更好的文档记录和支持?这种方言的优缺点是什么?我之所以说Scheme,完全是因为Scheme,这是我读过的最有趣但又非常难的书之一。我更喜欢CL,因为我喜欢面向对象编程,CLOS是最好的对象系统。我在学校学的。这是一次很棒的学习经历,我永远不会忘记函数式编程的基础知识。选择哪个版本的LISP可能无关紧要,只要您了解
我有一个字节缓冲区,6字节长,前四个包含ip地址,后两个包含端口,用大端符号表示
要获取我正在使用的ip
(apply str (interleave (map int (take 4 peer)) (repeat ".")))
将字节强制转换为int可以安全地获取ip地址吗
在我使用的java中
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[
给定一棵树,我想找到从根到每片叶子的路径
因此,对于这棵树:
D
/
B
/ \
A E
\
C-F-G
具有从根(A)到叶(D、E、G)的以下路径:
如果我将上面的树表示为(A(bde)(C(fg)),那么函数G会执行以下操作:
(define (paths tree)
(cond ((empty? tree)
'())
((pair? tree)
(map (lambda (path)
LISP程序是否需要与LISP编译器位于同一文件夹中,或者我可以从任何地方调用它?基本操作是使用路径名调用load
然后,您可能需要运行该文件提供的任何“main”函数
该位置也可以位于当前目录中,当然,这取决于平台。当前目录通常与Lisp可执行文件所在的目录无关,但它是从中调用它的shell的目录。当你点击某个东西时,我不知道Windows中的当前目录是什么,但我猜它是某个主目录代理
有几件事可能会围绕着这个基本操作展开。通常,代码被组织到ASDF系统中,并定义了一个或多个包。然后将.asd文
现在,我必须先将hastable复制到列表中,然后再对其进行排序:
(defun good-red ()
(let ((tab (make-hash-table)) (res '()))
(dotimes (i 33) (setf (gethash (+ i 1) tab) 0))
(with-open-file (stream "test.txt")
(loop for line = (read-line stream nil)
u
我想把字符串转换成列表。例如,http=>(htp)
我尝试:
(defun string-to-list (s)
(assert (stringp s) (s) "~s :questa non e una stringa")
(coerce s 'list))
但如果我这样做了
(string-to-list "http")
结果:
(#\h #\t #\t #\p).
我可以删除吗?
提前感谢:)您可以使用intern将字符串转换为符号。您可以使用string将字符转换为字符串
但是如何在Common Lisp中加载库呢?有点不清楚“在Common Lisp中加载库”是什么意思
它可能意味着“如何加载公共Lisp库”,在这种情况下,答案通常是“通过在ASDF系统定义中引用程序包,在加载系统时自动加载程序包”
这可能意味着“如何加载用另一种语言编写的库”,在这种情况下,答案可能是“使用CFFI”。不过,这可能需要围绕传递到库或从库中传出的数据编写一些粘合代码,以使从通用Lisp使用起来更方便。哪个Lisp?您需要指定您的方言和实现。例如,在Common Lisp中,您可以
是否可以在Lisp中使用/实现(也称为无点编程)?如果答案是肯定的,那么它已经完成了吗?是的,通常使用正确的功能是可能的。例如,以下是Wikipedia页面上Racket实现sum的一个示例:
#lang racket
(define sum (curry foldr + 0))
由于过程在默认情况下不是curry,因此使用curry或以明确的curry样式编写函数会有所帮助。您可以使用一个新的使用currying的define宏对其进行抽象。这种编程风格原则上在CL中是可能的,但是,作为一个
有人能告诉我编译和加载一个文件后,我们还需要在repl中定义函数(已经在编译和加载的文件中)才能使用它吗?还是还有过程
左键,以便repl检测到已定义的函数
在lisp中加载文件的意义是什么
谢谢。如果文件内容已读入,那么,假设没有抛出错误,所有形式的内容都已执行。如果其中一个是DEFUN表单,那么函数将被定义
准确地说,检查。如果文件内容已被读入,那么,假设没有抛出错误,所有形式的内容都已执行。如果其中一个是DEFUN表单,那么函数将被定义
准确地说,检查。谢谢@paul nathan。rep
在阅读了有关声明、特殊运算符、宏的文档以及StackOverflow中关于Common Lisp中的动态与词汇作用域的几个问题之后,例如,在SBCL中评估这些表单之后,我仍然无法理解以下行为
;; x is a free variable
CL-USER> (defun fn ()
(print x))
; in: DEFUN FN
; (PRINT X)
;
; caught WARNING:
; undefined variable: X
;
;
我一直在尝试用以下代码修改哈希表
(let ((alist '(gethash key *hash-table*)))
(setf alist (cons 'key 'weight)))
但问题是它实际上并没有修改哈希表(还要注意
(let ((alist (gethash key *hash-table*)))
(setf alist (cons 'key 'weight)))
也不起作用,而下面的代码起作用
(setf (gethash key *hash-table*) (co
我有两个文件,一个utils文件,我在其中定义了很多常量,如下所示:
(defconstant peca-l0 (make-array (list 3 2) :initial-contents '((T T)(T nil)(T nil))))
(defconstant peca-l1 (make-array (list 2 3) :initial-contents '((T nil nil)(T T T))))
(defconstant peca-l2 (make-array (list 3 2
因此,我在lisp中创建这个函数,在cond部分,基本上如果满足条件,我将返回一个包含2个值的列表,如果不满足条件,我将不返回任何内容!这是:
(defun lista-dos-aprovados (turma)
(mapcar (lambda (aluno)
(cond ((> (media-notas (notas aluno)) 9.5)
(list (first aluno) (second aluno)))
我的问题是:
如何设置REPL打印输出的精度
举个例子,这里有一个简单的函数:
(defun gaussian (rows cols sigma)
(let ((filter (make-array `(,rows ,cols)))
(rowOffset (/ (- rows 1) 2.0))
(colOffset (/ (- cols 1) 2.0)))
(loop for i from 0 to (- rows 1)
do (loop for j f
内部还原和外部还原是否总是创造相同的价值,如果不是,是什么导致不同的价值
我说的是Racket,一种函数语言
我知道有一些可能性,比如在球拍中更有效,但实际上会导致不同的结果。我无法创建一个这样的案例,但我觉得这应该是可能的,也可能是。不知道很危险
例如:
;inner reduction
(sqr (* 3 (+ 1 (sqr 2))))
->(sqr (* 3 (+ 1 (* 2 2))) ;(sqr)
->(sqr (* 3 (+ 1 4
我有一个.txt文件,如下所示:
0
1
2
3
4
5
6
7
8
0
1
2
3
4
5
6
7
8
我希望LISP读取文本文件并生成两个列表,第一个列表包含文本文件的前九个值,第二个列表包含接下来的九个值。像这样:List1=(012345678),List2=(012345678)。
我有以下代码:
(DEFUN text()
(SETQ l NIL)
(LOOP
(UNLESS (NULL l) (SETQ LST1 (LIST (READ l)(READ l)(R
我正在学习lisp,我不能理解这个问题
修改返回二次方程根的函数,以便在以下情况下返回根的实部和虚部:
它们是复杂的。假设系数是实的
;;;gnu clisp 2.49
(defun root(a b c)
(let ((root1 (/ (+ (* -1 b) (sqrt (- (expt b 2) (* 4 a c )))) (* 2 a)))
(root2 (/ (- (* -1 b) (sqrt (- (expt b 2) (* 4 a c )))) (* 2 a)
我正在用球拍学习口齿不清!
我解决这三个问题有困难
1) (香蕉在(简有一个后院))
2) (香蕉和简)
3) (((香蕉)和((简)))在她的后院)
按照上面列表的形式,我如何才能只得到Jane?(使用car/cdr)转到DrRacket中的“交互”窗口,对每个列表应用car和cdr的各种组合
例如:
> (car '(banana in (Jane has a backyard)))
'banana
> (cdr '(banana in (Jane has a backyard)
我定义了两个包:game(文件game.lisp)和commands(文件commands.lisp),由game.asd文件加载。使用(symbol function(find symbol“test function”commands))调用命令函数(已导出)时遇到问题,它返回函数未定义,即使(find symbol“test function”commands)返回函数是外部的,并且属于命令包
game.asd文件上的代码是:
(asdf:defsystem "game"
:depen
我正在逐字符读取一个文件,并构建一个由单词字母组成的列表。我这样做了,但当涉及到测试它打印出零。在测试函数之外,当我打印列表时,它打印得很好。这里有什么问题?LET关键字还有其他含义吗
这是我的阅读功能:
(defun read-and-parse (filename)
(with-open-file (s filename)
(let (words)
(let (letter)
(loop for c = (read-char s nil)
我试图将defstructs实例嵌套为另一个defstruct中的一些&key参数,如下代码所示。出于某种原因,要插入外部defstruct的变量没有被绑定到它们的值替换(这是我所期望的)。如有任何解释和/或建议,将不胜感激
(defstruct (compound (:conc-name nil)) op args)
(defstruct (var (:conc-name nil)) name)
(let* ((x (make-var :name 'x))
(y (make-v
我正在尝试编写一个类似于list的函数(lnn;list not nil),它只附加非nil的值
(list nil 3) --> (NIL 3)
(lnn nil 3) --> (3)
这是我到目前为止的代码。出于某种原因,它会在我尝试的任何输入上导致无限递归
(defun lnn (&rest items)
(lnn-helper nil items))
(defun lnn-helper (so-far items)
(cond ((null items)
我尝试在clisp中运行以下代码:
(defun gen-world
(loop for x to *hight*
do (loop for y to *width*
do (acons '(x . y) '(rock) *world*))))
并获取以下错误:
*** - APPLY: argument list given to SYSTEM::ERROR-OF-TYPE is dotted
(terminated by
"Invalid speciali
我是一个较新的公共lisp,当我使用iolib编写服务器时,我发现当telnet连接到服务器时,就会断开telnet,服务器抛出
未知类型说明符:挂断
当我打印回溯时,我发现它是在执行makeserver-line-echorer中的readline时出现的。我在那里使用处理程序case,但不工作。有什么帮助吗
这是我的代码:
(ql:quickload 'iolib)
(defpackage :com.server.test
(:use :sockets :iomux :common-l
问候
总结
无法将'(+)或'(-)作为数据传递给cond(未计算)。它们自己返回(+)或(-),作为参数返回标识元素(0)
救命啊
背景。
对于规范中的非标准方案
在这本书中;
句子是简单的列表和句子
单词是sybmol和字符串。
simply.scm中有三个高阶函数/过程,部分用于说明主题、每个、保持和累积
(每个函数数据)[对每个数据元素执行此函数]
(保留谓词?数据)[保留通过谓词?测试的数据元素]
(累积功能数据)[将所有数据收集到功能的形式中-与keep结合以删除无效数据]
例如(累
为什么removef没有真正修改变量?在Common Lisp中,参数是“通过身份”传递的(Allegro Common Lisp实现的开发人员之一)。想象一下指针(到堆对象)是通过值传递的,这对于大多数Lisp对象(比如字符串、向量,当然还有列表)都是如此;事情稍微复杂一些,因为实现可能也有立即值,但这与这里的要点无关
seq的setf修改函数的(私有、词汇)变量绑定。此更改在removef之外不可见
为了使removef能够在调用时影响周围环境,需要将其设置为宏:
(setf list (l
我喜欢口齿不清,但其中一件让我感到厌烦的事是它嵌套太多
在命令式编程语言中,我可以通过使用中间值来中断长表达式,例如:
int x=someFunctionCall()?someOtherFunctionCall():42;
int y=myUnterminableNameFunction(x);
而不是
int x=myUnterminableNameFunction(someFunctionCall()?someOtherFunctionCall():42);
这也可以在Lisp中完成,
我遇到了一个我没有得到的push函数的行为。也许有人可以向我解释为什么Lisp会这样做
假设我将列表定义为全局变量,然后尝试使用以下代码向其推送新值:
(defparameter *primes* '(3 5 7 11))
(push 2 *primes*)
然后*素数*现在是(2 3 5 7 11)。到目前为止,一切顺利
现在我尝试做同样的事情,但没有*primes*变量,即:
(push 2 '(3 5 7 11))
结果是一条错误消息:
EVAL:3不是函数名;尝试改用符号
现在我有两
我必须对奇数位置上的奇数元素c求和。这是行不通的。有人能告诉我哪里出了错吗?多谢各位
(defun sum (list)
(cond
((null list) 0)
((= (mod 2 (car list)) 0) (sum (cddr list)))
(T (+ (car list) (sum (cddr list))))))
检查函数mod的参数顺序。应该是:
(= (mod (car list) 2) 0)
为了避免这个错误,您可以使用函数evenp来代替
在我看来,这些操作员似乎也在做同样的事情。两者都接受一个符号并返回与其关联的函数。有什么区别吗
elisp评估返回以下内容:
德芬福x+1 x
福
富3
4.
“福
我也不明白
此外,common lisp和elisp之间是否存在差异?我正在从这两个方面的资源中学习 公共Lisp:
符号函数无法从词汇绑定函数中检索函数。默认情况下,函数引用词汇绑定函数。'foo只是函数foo的一个较短的符号
公共Lisp:
符号函数无法从词汇绑定函数中检索函数。默认情况下,函数引用词汇绑定函数。'foo只是函数
我在从我使用的字符串列表中删除字符串时遇到问题
(remove "lol" '("lol" "lol2" "lol")
但它返回相同的列表。这里有什么问题?您应该关闭“')”
所以写:(删除“lol”(“lol”“lol2”“lol”))您遇到了试图确定相等性的问题。我相信remove使用eql作为默认的平等性测试工具。不幸的是,两个字符串不是eql,除非它们实际上是同一个对象
尝试:
或者,如果您知道将要测试字符串,可以将string=作为测试函数传递。这只是一个录制错误,列表不会更改我不知
我正在努力找到解决以下函数的正确方法
(FOO #'– '(1 2 3 4 5))
=> ((–1 2 3 4 5) (1 –2 3 4 5) (1 2 –3 4 5) (1 2 3 –4 5) (1 2 3 4 –5))
foo函数的第一个参数应该是一个函数,必须应用于返回列表列表的每个元素,如上所示。我不确定我可以采取什么方法来创建这个函数。我考虑过递归,但不确定如何在每次调用中保留列表,以及我会有什么样的基本标准。任何帮助都将不胜感激。我不能使用循环,因为这是函数式编程。递归的基
在该站点:有如下用户输入功能:
(defun prompt-read (prompt)
(format *query-io* "~%~a: " prompt)
(force-output *query-io*)
(read-line *query-io*))
与以下更简单的形式相比,上述功能是否有任何主要优势:
(defun prompt-read2 (prompt)
(format t "~%~a: " prompt)
(setf answer (
我想根据下面的示例a添加一个列表框。
我添加了一个函数sendmessage,它映射到它的windows API计数器部分,并从wndproc调用它。
但它抱怨类型转换错误,如下所示
CL-USER 1 > (create-toplevel-window "ppp")
Error: #<Pointer to type (:UNSIGNED :SHORT) = #x01E902D8> cannot be
converted to foreign type (:UNSIGNED
我注意到,当我调用函数fillBoard时,它似乎在填充传递给它的列表时工作,但它有一个非常奇怪的副作用。无论如何,一旦调用了fillBoard,clearBoard函数将只返回fillBoard返回的列表。此外,如果我再次调用fillBoard,它将继续更新clearBoard中返回的值
据我所知,每次调用list变量时,clear中都应该有一个新的list变量实例,所以我不知道它是如何被修改的,也不知道它是如何存储新值的
我向fillBoard传递一个空列表,如((0 0 0 0 0)(0
我的老师不善于解释。他只是给了我们一个他无法解释的问题的答案,这导致我自己不太理解
有没有人可以详细说明这个答案是如何产生的?
我知道car返回列表的第一个元素,cdr返回第一个元素之后的所有元素
提前感谢您的阅读
假设Lisp变量E的值如下所示:
编写一个LISP表达式,该表达式不涉及任何数字,但计算结果如下:
答复:
在通用Lisp(以及其他Lisp语言)中,一个函数,如cadar或cdaddr等(在第一个c之后和最后一个r之前,最多可以有4个字符d或a)是具有以下规则的car和cdr功能组
有人在sbcl工作过吗?为什么不问问伊恩·埃斯利克自己?他可能对你在langutils和SBCL方面遇到的任何问题都很感兴趣。毫无疑问,我的电子邮件是麻省理工学院媒体实验室的eslick@the mit media lab。我部署了一个web应用程序,使用langutils将文本输入Montezuma,以便在SBCL上运行全文索引。我一直想再次尝试包装和发布langutils;也许一两个月后。很高兴收到您的反馈。我在获取load.lisp以检测依赖项(尤其是端口)时遇到问题。如果您能假设一个di
我正在试图找出funcall的正确用法。我有这个功能:
(defun frame-add-slot (frame slot)
(push (list slot) (rest (assoc frame *frames*))))
我试图让另一个函数调用它
(defun frame-add-subframe (superframe subframe)
(let ((res (push (list subframe) (rest *frames*))))
(funcall (frame
我想使用lisp从用户输入中读取2个值。我想将这些存储在变量中,以便在程序中使用它们
到目前为止,我拥有当前代码:
(defun le-posicao()
(let ((n_anel)
(pos_anel))
(princ "?")
(setf n_anel (read))
(setf pos_anel (read))
(when (and (integerp (n_anel)) (integerp (pos_anel)))
我试着直接解释:
(setf example (coerce "blablabla" 'list))
而且效果很好。事实上(汽车示例)返回#\b
但如果我尝试这样做:
(defun myfun (string) ( (setf example (coerce string 'list))))
(myfun "blablabla")
我不一样
如何修复?删除defun中setf周围的额外括号:
(defun myfun (string)
(setf example (coerce st
标签: Lisp
Scheme
metaprogrammingabstract-syntax-tree
是否可以执行set car和设置cdr
以下代码生成从1到n的素数:
(defun prime-list(n)
(let ((a)(b)(x (floor (sqrt n))))
(loop for i from (floor n 6) downto 1 do
(push (1+ (* 6 i)) a)
(push (1- (* 6 i)) a))
(loop while (<= (car a) x) do
(push (car a) b)
标签: Lisp
Racket
s-expressionmachine-languagecomputer-science-theory
我希望它还活着,但是
发件人:
LISP可以解释和执行以S形式编写的程序-
表达。因此,与机器语言一样,与大多数其他高级语言不同
级别的语言,它可用于生成程序以供进一步使用
执行
我需要更多关于机器语言如何生成程序以及Lisp如何生成程序的说明。所有的意思是机器代码可以直接将机器指令写入内存并跳转到这些指令来执行它们;事实上,这是许多攻击向量侵入软件的基础
关键是,当您编写机器代码时,很容易生成机器代码。但是,当您使用C这样的编译语言编写代码时,您不能只在运行时生成C代码然后执行它,除非您的程序
试着用我的口齿不清。但我想知道,为什么:
(defun hello(x)
(print x)
)
工作很好,但是:
(defun hello (x)
(print(x)) ; Fails with EVAL: undefined function X.
)
不是吗?在LISPs中,会考虑非空、无引号的列表(函数、宏或特殊形式)调用
所以
是对带有参数x的print的函数调用
但是,
是对print的函数调用,其参数等于(x)的值。但是由于(x)也是非空列表,为了获得(x)的值
在有向量的Lisp中,为什么还需要cons单元格?据我所知,cons单元是:
正好有两个元素的结构
命令
访问权限是O1
不过,所有这些也适用于2向量。那么有什么区别呢?cons细胞仅仅是Lisps有载体之前的遗迹吗?或者还有其他我不知道的区别吗?一方面,这是一个实现细节:给定向量,可以使用长度为2的向量实现cons单元格和链表
另一方面,这是一个相当重要的细节:ANSI Common Lisp标准规定类型vector和cons是不相交的,因此,实际上,您不能使用这个技巧来实现ANSI CL。我
我想写一个普通的口齿不清的奎因。我认为最简单的选择之一如下:
(let ((program '`(let ((program ',program )
(print (eval program)))))
(print (eval program))))
这不起作用,SBCL和CLISP都抱怨程序未绑定。但是,我发现使用DEFPARAMETER与LET不同,它确实有效:
对于第二个示例,打印的代码和编写的代码之间的唯一区别是空格和大写,我可以很容易地修复它
我有一个课堂作业,专门测试我们对do的理解,要求定义一个函数来生成一个数字列表的最小值。我们还被要求使用一个辅助函数(“较小”)来实现这一点
我没有以前的编码经验,被迫停留在do的范围内;我一直在尽可能多地阅读这个问题,但我发现的几乎所有东西都建议使用其他方法(do*、COND等)
我将简单的“较小”定义为:
我觉得有一个问题,即“较小”函数不能应用于第一个循环(对此的反馈将非常好),否则我的直接问题是变量“数字”出现错误:“UNBOUND-VARIABLE”。我不确定是哪个“区域”造成了混乱:
1 2 3 4 5 6 ...
下一页 最后一页 共 63 页