所以我对lisp很陌生,我对我遇到的问题感到很困惑:
(defun factorial (x)
(if (>= x 1)
(* x (factorial (- x 1)))
1))
阶乘功能可以输出3000!但是,没有问题
(defun sum (x)
(if (<= x 1)
1
(+ x (sum (- x 1)))))
堆栈溢出在(sum 10000),我使用clisp。
有人能说明一下为什么会发生这种事吗?
我有下一个模型结构:
data class Person(
val id: UUID,
val firstName: String,
val lastName: String,
val email: String,
val login: String,
val passwordHash: String,
val roles: Set<Role>
)
data class Role(
val id: UUID,
val name: String,
val childrenRoles: List<R
我看到以下这两个函数在语法上都是尾递归函数,但是,在racket中,哪一个函数实际上被视为尾递归,还是两者兼而有之?我的意思是它是否是由解释器作为尾递归优化的。
;;1
(define (foo i m s)
(if (< i m)
(foo (+ i 1) m (+ i s))
s))
;;2
(define (foo i m s)
(if (= i m)
s
(foo (+ i 1) m (+ i s))))
在其他的lisps中是否有不同的答案?
在我正在编写的程序中,我有一个多维数组,我只需要在最内部的对象上执行一些操作。
有没有更好的方法来写这段代码?
for (const threeDimensionalArray of fourDimensionalArray) {
for (const twoDimensionalArray of threeDimensionalArray) {
for (const oneDimensionalArray of twoDimensionalArray) {
for (const obj of oneDimensionalArray) {
// do s
这是#7 of :通过将每个列表的元素替换为它的元素(递归),将一个列表转换为一个‘扁平’列表。我已经尝试了几种解决方案,例如#或。它们都可以工作,但是如果我要展平一个包含带引号的元素的列表,我会遇到一个问题。例如:
> '(a 'b c)
(A 'B C)
> '(a (quote b) c)
(A 'B C)
> (flatten '(a 'b c))
(A QUOTE B C)
在后一种情况下,我希望获得:
(A 'B C)
看起来‘的内部表示妨碍了这项任务!SBCL,CLISP,ECL,...它们的行
列表理解经常被认为是遍历列表列表的一种优雅方法,比如[item for sublist in original_list for item in sublist]。
然而,对我来说,它似乎只处理有两层的列表的简单列表:[[1,2],[3,4]。
有没有一种通用的优雅的方法可以在列表列表的未知层数中找到一项?[0,[1,[2,[3]]],[4,[5]],6]。
在检查之前,我已经考虑过将所有元素展平到一个列表中,但是有没有更简单的方法呢?
我在脑海中有一个项目,有这么多的表单控件(比如300个标签),我必须改变它们的所有文本。
所以我想做这样的事情
For i= 1 to 300
(Labeli).text = "xyz"
Next
我不能一个接一个地写和更改所有的标签,所以我需要一种方法来通过使用数字+ " label“来更改任何标签,这样它就变成了"Labeli”。
对不起,我的英语,我正在等待你的帮助,谢谢:)
这是我想要的一个例子。我有一个id,我想要select *这个id和它的父元素。有可能吗?
cn.Execute("create table if not exists Link( id INTEGER PRIMARY KEY AUTOINCREMENT , `parent` INT , `val` INT NOT NULL , FOREIGN KEY (parent) REFERENCES Link(id));", new { });
cn.Execute("insert into Link(val) values(3)");
cn.Execute(
在racket中,我定义了以下函数,并想知道它是否是尾部递归函数
(define foo
(λ (c m s1 s2)
(if (< c m)
(if (= (modulo m c) 0)
(foo (+ c 1) m (+ s1 c) s2)
(foo (+ c 2) m s1 (+ s2 c)))
(cons s1 s2))))
我的问题实际上是这样的,但我必须写一些其他的东西,以满足我的岗位质量标准。实际上,我不知道我的职位质量标准是什么。
当我使用相对较大的标记文件运行任何-命令时,我总是会在Emacs上的小型缓冲区中得到类似regexp匹配器中的堆栈溢出之类的错误消息。在*Messages*缓冲区中,日志消息如下所示:
File TAGS is large (9MB), really open? (y or n)
Loading tag file...70%
and: Stack overflow in regexp matcher
似乎Emacs没有足够的堆栈大小来读取整个标记数据。有任何方法来增加Emacs的堆栈大小吗?
我尝试了两个版本的Emacs:
MacOSX24.1(通用二进制文件)的Emacs
用于Ma