小编X10*_*10D的帖子

Haskell 有多少种句法形式?

诺维格大师曾经说过:

Scheme 的美妙之处在于,完整的语言只需要 5 个关键字和 8 个句法形式。相比之下,Python 有 33 个关键字和 110 种句法形式,而 Java 有 50 个关键字和 133 种句法形式。所有这些括号可能看起来很吓人,但 Scheme 语法具有简单性和一致性的优点。(有些人开玩笑说“Lisp”代表“很多令人讨厌的愚蠢括号”;我认为它代表“Lisp 在语法上是纯粹的”。)

那么 Haskell 是如何比较的呢?

syntax haskell

5
推荐指数
1
解决办法
196
查看次数

Scheme中n-ary树的map函数

二叉树的映射函数的定义是:

(define (binary-tree-map proc tree)
   (cond ((null? tree) null)
         ((not (pair? tree)) (proc tree))
         (else (cons (binary-tree-map proc (car tree))
                     (binary-tree-map proc (cdr tree))))))
Run Code Online (Sandbox Code Playgroud)

n-ary树的地图功能是什么样的?尝试:

(define (n-tree-map proc tree)
  (cond ((null? tree) null)
        ((not (pair? tree)) (proc tree))
        (else (apply map append (lambda (p)(n-tree-map proc (cdr tree)))))))
Run Code Online (Sandbox Code Playgroud)

lisp tree scheme functional-programming

3
推荐指数
1
解决办法
655
查看次数

使用树布局可视化 Racket 中的任意树

如何可视化任意树?

例如: (define T1 '(and (or x1 x2)(or x3 x4 x5)))

或者使用以下命令生成:

(define functions '(not if and or))
(define terminals '(A0 A1 A2 D0 D1))
(define functions&terminals (append terminals functions ))

(define (pick-one list)
  (list-ref list (random (length list))))

(define arities '((if . 3)(and . 2)(or . 2)(not . 1)))

(define (terminal? symbol)
  (find (lambda (x)(eq? x symbol)) terminals))

(define (function? symbol)
  (find (lambda (x)(eq? x symbol)) functions))

(define (arity non-terminal)
  (let ((arity (find (lambda (x)(eq? non-terminal (car x))) arities))) …
Run Code Online (Sandbox Code Playgroud)

tree visualization racket pict

3
推荐指数
1
解决办法
962
查看次数

Racket 中 list 和 list* 的区别

在读的时候:

https://docs.racket-lang.org/reference/pairs.html

我碰到 list*

与 list 类似,但最后一个参数用作结果的尾部,而不是最后一个元素。仅当最后一个参数是一个列表时,结果才是一个列表。

“最后一个参数用作结果的尾部,而不是最后一个元素”是什么意思?我认为列表总是以空列表结尾:'()

如果:“仅当最后一个参数是列表时,结果才是列表”,那么还有什么?我认为计划中的所有内容都是一个列表。

scheme racket

2
推荐指数
1
解决办法
148
查看次数

是否可以编写一个函数来接受任何宏并将其转换为函数,以便它可以作为参数传递给另一个函数?

AND 和 OR 是宏,并且由于宏不是方案/球拍中的第一类,因此它们不能作为参数传递给其他函数。部分解决方案是使用 and-map 或 or-map。是否可以编写一个接受任意宏并将其转换为函数的函数,以便它可以作为参数传递给另一个函数?是否有任何语言具有一流的宏?

macros scheme racket

2
推荐指数
1
解决办法
157
查看次数

是否可以根据要比较的数据生成相等函数?

如果两个布尔值相同,则两个布尔值相等,两个数字相似。如果两个集合具有相同的元素,则它们相等。如果检查两组是否相等,我们可以使用以下方案/球拍函数:

\n\n
(define (same-set? l1 l2)\n  (and (subset? l1 l2) (subset? l2 l1)))\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么这样的函数是如何自动生成的呢?可以为任意数据类型生成它吗?

\n\n

等价关系的基本性质是:

\n\n

替换性质:对于任意数量a和b以及任意表达式F(x),如果a = b,则F(a) = F(b)(如果两边都有意义,即格式良好)。\n一些具体例子其中:

\n\n

对于任何实数a、b和c,如果a = b,则a + c = b + c(这里F(x)是x + c);

\n\n

对于任何实数 a、b 和 c,如果 a = b,则 a \xe2\x88\x92 c = b \xe2\x88\x92 c (这里 F(x) 是 x \xe2\x88\x92 c) ;

\n\n

对于任何实数a、b和c,如果a = b,则ac = bc(这里F(x)是xc);

\n\n

对于任何实数 a、b 和 c,如果 a = b 且 c 不为零,则 a/c = b/c(此处 F(x) 为 x/c)。 …

scheme code-generation equality equals racket

2
推荐指数
1
解决办法
250
查看次数

如何将函数应用于方案或球拍中的每个子列表?

如何获得每个子列表的产品?尝试:

(apply map * '((1 2) (3 4)))
Run Code Online (Sandbox Code Playgroud)

但它返回:'(3 8),而它应该返回'(2 12)

scheme functional-programming racket

1
推荐指数
1
解决办法
193
查看次数