我正在尝试输出前 100 个素数并不断收到错误消息:
应用程序:不是程序;期望一个可以应用于给定参数的过程:(#) arguments...:[none]
错误显示在我的 take$ 程序中:
(if (or (= m 0) (null? st))
'()
(cons (car st) (take$ (- m 1) ((cdr st)))))))
Run Code Online (Sandbox Code Playgroud)
这是我所有的代码:
(define int-builder$
(lambda (x)
(list x (lambda () (int-builder$ (+ 1 x ))))))
(define take$
(lambda (m st)
(if (or (= m 0) (null? st))
'()
(cons (car st) (take$ (- m 1) ((cdr st)))))))
(define filter-out-mults$
(lambda (num st)
(cond
(( = (remainder (car st) num) 0)
(filter-out-mults$ num ((cadr st))))
(else
(list …Run Code Online (Sandbox Code Playgroud) scheme primes sieve lazy-sequences non-procedure-application
问候,
阅读Simply Scheme Chapter 09 就我所见,Lambda 似乎很重要。我想把它练到骨子里,所以我正在寻找针对lambda 的Project Euler 的初学者练习(最好是非递归的)。让包容是奖金。有资源吗?
在网上,我找到了这个和对Simply Scheme 的引用。我知道有好书,但我真的只是在寻找练习。
非常感谢。
我是 Scheme 编程的新手,并试图在 if 条件中定义一个 var。例如,我有:
(if (< x y) (define x y) ) ;(GOAL: if x < y, than x=y..)
Run Code Online (Sandbox Code Playgroud)
但我得到了错误:
let: bad syntax (not an identifier and expression for a binding) in:...
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题,将不胜感激。
ps对不起我的英语
我正在尝试编写一个非常简单的过程来检查任意值是否是嵌套列表的元素。例如,如果列表是 this
(8 (4 (3 () ()) (2 () ())) (5 (13 () ()) (28 () ())))),我们要检查数字6是否是该列表的一部分,如果不是,则返回 #f,如果是,则返回 #t,我们将如何做?我们不能简单地 cdr 向下列表,因为我们只会检索下一个列表,而不是下一个列表中的元素。我可能正在考虑使用过滤器,但不确定这是否是该过程的最佳方向。
我正在努力区分 let、letrec、let* 之间的区别......因为scheme不是我的主要编程语言,我的记忆已经存在很长时间了..我有这个功能..现在我在这里对letrec感到非常困惑..这又是递归。我可以理解……但在这段代码中无法建立足够的连接……(可能仍然对递归感到困惑)有人可以解释为什么这里需要 letrec
(define myFunc
(lambda (start end res func)
(letrec ((func:rec_func
(lambda (x i y)
(if (>= i start)
(func:rec_func (cons i x) (- i res) (cons (func i) y)) ;; line6
(cons x (cons y '())))))) ;; line7
(func:rec_func '() end '()))))
Run Code Online (Sandbox Code Playgroud)
(已编辑)我所理解的尾递归
-> [Q1] 它是尾递归吗?
-> [Q2] 那么,是否应该始终使用 letrec 进行尾递归?
此函数返回 x、y 的列表,边界为 start、end,因此它检查索引 i 是否在边界内,如果是,则执行第 6 行
-> [Q3]那么,第 6 行是什么?我无法得到 line6
开始完成计算机程序的结构和解释练习,我在第一组练习中坚持这一点.
a=3
b=4
(+ 2 (if (> b a) b a))
Run Code Online (Sandbox Code Playgroud)
我已经找到了答案:6但是,我自己一直在努力,我无法弄清楚如何获得这个数字.
谁能解释一下?
我试图找出方案中最大的int值到底是多少?例如,在Java中,最大的有符号整数为2 ^ 31-1。
如何在方案中获取此值(最大的int值)
我用递归和循环宏编写了一些简单的循环,但令我困扰的是,递增计数需要两个参数,递减计数不需要。
是否存在示例?
这个问题的开始只是如何打印递增的内容。我的第一个功能是“ printsomestuff”。
(defun printsomestuff (stuff times)
(if (= times 0)
'im-the-return-value
(progn
(print stuff)
(printsomestuff stuff (1- times)))))
(defun counting-down (topnumber)
(if (= topnumber 0)
'done
(progn
(print topnumber)
(counting (- topnumber 1)))))
(defun loopcounting (uptonumber)
(loop for i from 1 to uptonumber
do (print i)))
(defun recurcounting-up (uptonumber)
(let ((incrementer 0))
(if
(= incrementer uptonumber)
'done
(progn
(print incrementer)
(recurcounting-up (+ incrementer 1))))))
(defun recur-counting-up-two (uptonumber startnumber)
(if (> startnumber uptonumber)
'done
(progn
(print startnumber)
(recur-counting-up-two uptonumber …Run Code Online (Sandbox Code Playgroud)