0

我是Scheme的新手。有人可以解释*以下代码中的内容吗?

(define pat2 '(or
           (list a g t a t a t g g a t a)
           (list g t a g g c c g t)
           (list c c c g a t a a a a a a g t g t c g t)
           (list c g a t c c c (junk 1) c g a t c t a)))
(define pat3 (list 'list pat2 '(junk 2)))
(define pat4 (list '* pat3))  ; I'm confused about the * here.

我知道的内容pat4将类似于

(*
  (list
  (or (list a g t a t a t g g a t a)
  (list g t a g g c c g t)
  (list c c c g a t a a a a a a g t g t c g t)
  (list c g a t c c c (junk 1) c g a t c t a))
  (junk 2)))

但是我仍然对什么*是......它通常表示乘法感到困惑,但它不可能在这里可以吗?

谢谢!

4

1 回答 1

1

它只是符号 * (这就是它被引用的原因;引用防止符号被评估)。

如果你执行你的代码,你会看到 pat4 只是 pat3 前面带有 * 符号:

> pat2
'(or (list a g t a t a t g g a t a) (list g t a g g c c g t) (list c c c g a t a a a a a a g t g t c g t) (list c g a t c c c (junk 1) c g a t c t a))
> pat3
'(list (or (list a g t a t a t g g a t a) (list g t a g g c c g t) (list c c c g a t a a a a a a g t g t c g t) (list c g a t c c c (junk 1) c g a t c t a)) (junk 2))
> pat4
'(* (list (or (list a g t a t a t g g a t a) (list g t a g g c c g t) (list c c c g a t a a a a a a g t g t c g t) (list c g a t c c c (junk 1) c g a t c t a)) (junk 2)))
于 2013-02-27T06:06:41.790 回答