Что такое двойные скобки в схеме / ракетке? - PullRequest
1 голос
/ 12 февраля 2020

Это пример for l oop в Racket:

(define List '(1 2 3))
(for ((I List))
  (displayln I)
)

В Scheme / Racket обертывание пары в одну скобку о чем-то предназначено для оценки. Но приведенная выше форма for l oop принимает первый параметр как ((I List)), заключенный в пару с двойными скобками.

Это выглядит так:

  • Сначала оцените (I List)
  • Затем оцените I List

Каков реальный теоретический смысл такого рода оценки в двойных скобках?

1 Ответ

2 голосов
/ 12 февраля 2020

Это последовательность привязок, а не вызов функции.

(let* ((x 1) (y 2) (z 3))  ; <-- sequence of bindings
  (displayln (+ x y z)))

Аналогично:

(for ((x '(1 2 3)) (y '(3 2 1))) ; <-- like above 
  (displayln (+ x y)))

Теоретически, либо язык анализирует их по-разному, либо они расширяются до других форм (макросов).

...