在Dr. Dr.中进行项目时,我将变量初始化为null,如下所示:
(define var null)
Run Code Online (Sandbox Code Playgroud)
我怎样才能在R5RS中做到这一点?
我发现Prolog的回溯非常吸引人,并且想知道是否有人可能会想到如何模仿Prolog在Racket中的回溯,作为一个可能的夏季项目想法.另外,为什么Racket宏如此强大?
我正在寻找Racket中的内置函数,如果列表中的所有项都为真,则返回True.
我试过了:
(define (all lst)
(when
(equal? lst '())
#t)
(if (not (car lst))
#f
(all (cdr lst))))
Run Code Online (Sandbox Code Playgroud)
给出错误:
car: contract violation
expected: pair?
given: '()
Run Code Online (Sandbox Code Playgroud)
几个测试用例:
(all '(#t #f #t)) ; #f
(all '(#t #t #t)) ; #t
Run Code Online (Sandbox Code Playgroud)
你能解决它还是指向内置功能?(我用谷歌搜索,但没有得到有意义的结果)
以下程序,用Scheme编写,
(define (eat xs)
(lambda (x)
(if (eq? x 'vomit)
(reverse xs)
(eat (cons x xs)))))
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式调用:
> eat
#{procedure 9165 eat}
> (eat '())
#{procedure 9166 (unnamed in eat)}
> ((eat '()) 1)
#{procedure 9166 (unnamed in eat)}
> (((((eat '()) 1) 2) 3) 4)
#{procedure 9166 (unnamed in eat)}
> ((((((eat '()) 1) 2) 3) 4) 'vomit)
(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
因为没有突变,例如.set!,并且使用递归传递状态我认为在Haskell中编写这将是微不足道的:
eat xs x = if x == "vomit" then reverse xs else eat (x:xs) …Run Code Online (Sandbox Code Playgroud) 对于以下输入,我无法完全理解球拍的REPL行为:
> 1 ;; Simple, 1 is self-evaluating
1
> '1 ;; (quote x) => x
1
> ''1 ;; ?? I expected '1
''1
> '''1 ;; ???
'''1
Run Code Online (Sandbox Code Playgroud)
我尝试编写一个简单的宏来测试:
#lang racket
(define-syntax e
(syntax-rules ()
((e x) (display (eval x )))))
Run Code Online (Sandbox Code Playgroud)
但它也给了我意想不到的输出:
> (e 1) ;;Self evaluating
1
> (e '1) ;;Evaluated '1 as 1
1
> (e ''1) ;;Shouldn't ''1 have been evaluated only once to '1?
1
> (e '''1)
'1
Run Code Online (Sandbox Code Playgroud)
那么racket的repl做了多少额外的步骤,为什么我的宏不像我预期的那样工作?
当我们谈论clojure(或其他lisp)编程时,在引用其中声明的对象时应该说什么?例如:
(let [a ...
Run Code Online (Sandbox Code Playgroud)
当然,如果a是一个函数,我们说函数a,但是当它不是函数时应该说什么呢?表格?数据?符号?文字?
通常,我们会在其他编程语言变量或对象中说出这些内容.
每当我看到函数返回函数时,返回的函数总是一个lambda.我想知道我是否可以让我的函数返回一个具有名称的函数.
如何实现一个以一个参数作为参数输入任意数量的过程并返回另一个函数的函数,是Scheme中这些过程的组成。
例如:
(define (f x) (* x 2))
(define (g x) (* x 3))
(define (h x) (- x))
((comp-func f g h) 1) => -6
((comp-func f g) 1) => 6
((comp-func h) 1) => -1
((comp-func) 1) => 1
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试定义一个函数,该函数采用列表列表,模型列为方形矩阵并返回所述矩阵的对角线.
例如,输入((a b c) (d e f) (g h i))给出(a e i).
我对如何解决这个问题有一个模糊的想法(取最后一个列表的最后一个元素,然后是第二个到最后一个列表的倒数第二个元素等等),但我不确定如何编写这个方案.
如果有人能指出我正确的方向,我将不胜感激.
谢谢.
鸡肉配备了我想要的大部分主要SRFI,但我觉得非常令人沮丧的一件事是,据我所知,我必须按编号使用它们.即使我记得那(use srfi-69)真的意味着"使用哈希表",我项目中的其他人也不会 - 甚至我不一定记得更少使用的monickers,比如srfi-14.(多线程,如果你很好奇.)
是否有SRFI的别名系统,以便我可以写一些更接近的东西(use hashtables)?或者,有什么方法可以告诉Chicken在我启动时使用所有内置的SRFI?