我正在编写一个程序中的程序,它使用递归遍历列表,并在计数器达到一定数量N时停在某个指针处
(define (functX N lst)
(define counter 1)
(cond
[(empty? lst) empty]
[(negative? N) empty]
[(< (length lst) N) empty]
[(<= counter N) ((set! counter (+ counter 1))(cons (first lst) (functX N (rest lst)))))]
[else empty]))
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么从底部的第二行给我带来麻烦:我得到的错误是"程序应用程序:预期程序,给定:'(1)(无参数)"
我想根据其值创建列表的子集.例如:
List (AA AB BA DC AD)
Run Code Online (Sandbox Code Playgroud)
我想要一个列表,其中包含所有原子的值,从'A'开始.所以答案应该是:
(AA AB AD)
Run Code Online (Sandbox Code Playgroud)
我现在可以通过遍历整个列表并将每个值转换为另一个列表并读取第一个值然后重新创建列表来实现此目的.
这是一个非常复杂的解决方案.
Scheme中是否有任何方法可以读取列表中字符串的第一个字符并删除该元素?
例如,我有两个异步方法
(get-a 10 (lambda (a) (get-b a (lambda (b) (display b)))
Run Code Online (Sandbox Code Playgroud)
但我想写一些类似的东西
(define (a (get-a 10)))
(define (b (get-b a)))
(display b)
Run Code Online (Sandbox Code Playgroud) scheme continuations functional-programming callcc continuation-passing
我将如何编写自己的eqv?还是相等?在计划?我会做一个cond并寻找符号吗?,数字?等,并返回相应的#t或#f?
晚间!
我需要在Scheme中编写一个reduce函数,它就像Python中的内置reduce函数一样.在Scheme中编写reduce函数很容易:
(define (reduce fn lis identity)
(if (null? lis)
identity
(fn (car lis)
(reduce fn (cdr lis) identity))))
Run Code Online (Sandbox Code Playgroud)
但是,此代码与Python reduce不同,后者仅使用两个参数(函数和要减少的项列表).
任何人都可以帮我写一个这样工作的Scheme函数吗?
(>(reduce*'(2 4 5 5))=> 200,是我们教授的例子.)
非常感谢,伙计和女孩们.你是如此有帮助<3
ETA:对Levien先生和Jester-Young先生,非常感谢你.您提供了大量的信息,以帮助我自己解决问题.*拥抱
我有这样一个文件:
declare
a = aexpress
b = bexpress
begin
Run Code Online (Sandbox Code Playgroud)
我的方案程序将当前输入端口设置为此文件,然后调用
(declarations (read))
我回来的内容,是#f.或者说控制台说"对象#f不适用".
我已经完成了我的括号使用,并且无法找到任何理由它应该返回一个布尔值,但我确定我错过了一些东西.
我想要的是((a aexpress)(b bexpress))
(define declarations
(lambda (token)
(cond (((eq? token 'begin) '())
(else (let* ((name token)
(eqsign (read))
(value (read)))
(cons (list name value) (declarations (read)))))))))
Run Code Online (Sandbox Code Playgroud)
被称为:
(define convert
(lambda (filename)
(begin
(set-current-input-port! (open-input-file filename))
(statement (read))
)
)
)
(define statement (lambda (token) (
cond (
( (eq? token 'declare) (declarations (read)) )
; ( (eq? token 'declare) (declare_statement) )
; ( (eq? …Run Code Online (Sandbox Code Playgroud) 目前,当我正在尝试功能语言的延续时,我的理解是继续记录当前程序计数器和寄存器文件,当返回延续时,PC和注册文件将恢复为它记录的值.
所以在Might博客文章中的以下愚蠢的例子中,
; right-now : -> moment
(define (right-now)
(call-with-current-continuation
(lambda (cc)
(cc cc))))
; go-when : moment -> ...
(define (go-when then)
(then then))
; An infinite loop:
(let ((the-beginning (right-now)))
(display "Hello, world!")
(newline)
(go-when the-beginning)) ; here the-beginning continuation passed to go-when, which ultimately will have an continuation applied to an continuation, that returns a continuation, which will cause the the program point resumed to the PC and registers states recorded in it.
Run Code Online (Sandbox Code Playgroud)
我不确定我的理解是对的..如果你认为不是,请纠正我.....
我知道gensym可以生成符号,但似乎有一个基数的全局计数器,它可能非常大,例如,(define s (gensym 's))s可以最终得到s12345.我想知道是否有办法重置计数器,生成的数字可能很小?喜欢s14?