let: плохой синтаксис (отсутствуют пары привязок или тело) - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы объявить три списка, в которых нужно выполнять операции, но при использовании «define» их значение не меняется. Поэтому я подумал, что буду использовать «lat», но это дает мне ошибку.

(let ((A '0)
      (B '0)
      (C '0)
      )
  )

Я ожидаю 3 списка, но это дает мне эту ошибку:

let: bad syntax (missing binding pairs or body) in: (let ((A (quote 0)) (B (quote 0)) (C (quote 0))))

Ответы [ 3 ]

1 голос
/ 08 июля 2019
(let ((a 0) (b 0) (c 0))
  ;; a, b, c lives inside this let block
  (list a b c)) ;; a body of the let that makes a list (0 0 0)

;; a, b, c from the let block no longer exist 

В отчете Scheme предполагается, что вы используете привязку для чего-либо.Таким образом, после того, как вы определили привязки let, ожидается, что в нем есть хотя бы одно выражение, которое что-то делает.let - это просто синтаксический сахар для этого:

;; anonymous lambda call
((lambda (a b c)
   (list a b c))  ;; body of the lambda that makes list (0 0 0)
 0 ; a
 0 ; b
 0); c

Теперь представьте, что это должно делать:

;; anonymous lambda call
((lambda (a b c)
  ;; no body that does anything 
  )
 0 ; a
 0 ; b
 0); c
0 голосов
/ 09 июля 2019

запись let без тела аналогична определению лямбда-функции без тела.

(let ((A '0)
      (B '0)
      (C '0)
      )
  )

- это то же самое, что и запись

(lambda(a b c) ) 0 0 0) ;; here it is not allowed to define function with no statement inside

('0 оценивается само по себе).

0 голосов
/ 08 июля 2019

Вы сделали все правильно, но код отсутствует

(let ((A '0)
      (B '0)
      (C '0)
      )
  you need code here
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...