给定n位整数和m位整数.如何使用列表,数组或任何其他特定于lisp的数据类型在LISP中将它们相乘?
例如;
一(1)(2)... A(N)
B(1)B(2)... B(M)
结果;
R(1)R(2)... R(M + N)
我正在研究关于SICP(计算机程序的结构和解释)的书,这本书要求我学习lisp,所以我为windows安装了一个名为SBCL(Steel Bank Common Lisp)的lisp编译器.问题是我从书中看到了这个代码:
(define pi 3.14159)
(define radius 10)
(* pi (* radius radius))
Run Code Online (Sandbox Code Playgroud)
将其保存在notepad ++上作为filename.lisp并运行它.
发生错误,说:"函数COMMON-LISP-USER :: DEFINE未定义." 为什么会这样?我如何使这项工作?
我需要编写一个lisp函数来消除整数列表中每次出现的x.例如,(elim 7'(7 6 8 8 7 7 9 0))返回(6 8 8 9 0)
所以我在Lisp中编写一个语法,并希望找到语法树的最大深度.
例如,
(SENTENCE (NOUN-PHRASE (DETERMINER THE) (NOUNPLURAL MEN))
(VERB-PHRASE-PAST
((VERBPAST SAW) (NOUN-PHRASE (DETERMINER THE) (NOUNPLURAL DOGS)))))
Run Code Online (Sandbox Code Playgroud)
最大深度应为4(句子 - >动词 - 短语 - 过去 - >名词 - 短语 - >确定者 - >).
但是列表长度为3,并且在扩展内部列表时始终不正确.
如何编写函数来返回此最大深度(不使用任何外部库)?
如何将字符与Common Lisp进行比较?我有google一下,发现有一些功能做比较,比如char=,char/=,char<,char>,char<=,和char>=.但是,我不能像以下那样使用所有功能:
(char= 'a 'a)
(char< 'a 'b)
Run Code Online (Sandbox Code Playgroud)
如果我键入这些命令,CLISP只是给我错误消息"参数A不是一个字符".为什么"A"不是角色?我必须写(char= #\a #\a)它才能让它发挥作用.我想创建函数来进行字符排序.
谢谢.对不起,我的英语不好.
我定义了一个函数来重复函数调用:
(defun repeat (n f x)
(if (zerop n) x
(repeat ((- n 1) f (funcall f x)))))
Run Code Online (Sandbox Code Playgroud)
现在我想要申请cdr:
(repeat (1 (function cdr) '(1 2 4 5 6 7)))
Run Code Online (Sandbox Code Playgroud)
我清楚地提供n=1,f=cdr和x='(1 2 3 4 5 6 7).它应该适用cdr一次.这是我收到的错误消息:
Error: Funcall of 1 which is a non-function.
[condition type: TYPE-ERROR]
Run Code Online (Sandbox Code Playgroud)
但我有一个funcall的cdr,不是1.
我正在使用Franz的Allegro Lisp的免费版本.
(defun tictactoe3d ()
'(
((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL))
((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL))
((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL))
))
Run Code Online (Sandbox Code Playgroud)
我需要一个能在NIL的位置添加X或O的函数,我需要该函数来询问用户他想要放置它的位置.棋盘游戏是一个tic tac toe 3D(3个板块,1,2个位置,而不是9个).第一行是1级(它基本上与具有9个位置的一个tic tac toe相同).如何将元素添加到这样的列表中.我知道我必须验证一个位置是否为零.
所以我知道通常这个错误意味着我忘了某个地方的括号(或者那个效果)但是对于我的生活,我无法弄清楚我哪里出错了.
我似乎得到的具体错误是:(SETF (GET (NTH CNT EXOTIC-CARS) 'MAKE) (READ MYSTREAM))- 这基本上是我第一次定义函数的第一行.
整个代码在这里:
(setq exotic-cars '(car1 car2 car3 car4 car5 car6 car7 car8 car9 car10))
(defun dostuff ()
(fetchinput)
(printlist)
(findmake)
(mysort))
(defun fetchinput ()
(with-open-file (mystream "cars.dat")
(setq cnt 0)
(loop while (<= cnt 9)
do ((setf (get (nth cnt exotic-cars) 'make) (read mystream))
(setf (get (nth cnt exotic-cars) 'model) (read mystream))
(setf (get (nth cnt exotic-cars) 'cost) (read mystream))
(setf cnt (+ cnt 1))
)
)))
(defun findmake …Run Code Online (Sandbox Code Playgroud) 我正在尝试写入Common Lisp中的文件,但我不断收到"文件不是流"错误:
[1]> (open "file.txt" :direction :output :if-does-not-exist :create :if-exists :supersede)
#<output buffered file-stream character #P"file.txt">
[2]> (princ 'Hello "file.txt")
*** - princ: argument "file.txt" is not a stream
Run Code Online (Sandbox Code Playgroud)
即使尝试关闭该文件也会返回错误:
[4]> (close "file.txt")
*** - no-applicable-method: When calling #<standard-generic-function close>
with arguments ("file.txt"), no method is applicable.
Run Code Online (Sandbox Code Playgroud)
该文件已正确创建,因此我认为它可能是一个权限问题,但似乎并非如此.到目前为止,我已经用Google搜索了这个错误.有谁知道我做错了什么?谢谢.
PS:我正在使用CLISP 2.49(2010-07-07)运行Linux Mint 17.3 Rosa
我不明白为什么我的程序表现得像它一样.
(defvar A '((X Y Z) (J L O P) (G W U))
(defvar Z '(X W D U G))
(defvar STOP 'G)
(defun ADD_to_Z(A2)
(prog()
(cond
((equal (Member_Of_Z (list A2)) 0) )
(t (setq Z (append Z (list A2))) )
)
)
)
(defun Member_of_Z(cdr_A1)
(prog(n temp)
(setq n 0)
(setq temp cdr_A1)
repeat
(cond
((null temp) (return n))
((null (member (car temp) Z) ) (setq n (+ n 1)) (setq temp (cdr temp)))
(t (setq n (+ n …Run Code Online (Sandbox Code Playgroud) common-lisp ×10
lisp ×10
char ×1
clisp ×1
comparison ×1
function ×1
lambda ×1
list ×1
scheme ×1
sorting ×1