"где x - это список, первый элемент которого является S-выражением, которое оценивается как #t или #f (на самом деле, я просто хотел сделать (и (eqv? (Длина x) 1) (машина x)), но это не сработало. "
Во втором случае (car x)
, вы просто получаете первый элемент в списке, вы не оцениваете его.
Скажите свой списокx - это список ((eq? 3 3))
, я просто что-то говорю. Его длина равна 1, и его первый элемент оценивается как #t
, если мы оцениваем его , но (car x)
в этом случае возвращает list (eq? 3 3)
, который представляет собой список из одного символа и двух чисел.
Решением вашей проблемы будет использование eval
, как в (eval (car x) (null-environment))
, который оценивает данные,например, список.
Если вы используете ((car x))
, как указано в другом ответе, это будет работать только в том случае, если ваш первый элемент списка является thunk, нулевым, если вы создали x путем оценки списка (list (lambda () #t))
.
В этом случае вашим первым элементом будет функция, которая при вызове без аргументов дает #t
.