Почему эта легальная (рэкет) схема? - PullRequest
3 голосов
/ 08 марта 2012

Я просматривал htdp и нашел это где-то в начале: -

Объясните, почему следующие предложения являются недопустимыми определениями: 1. (define (f 'x) x)

Тем не менее, он отлично работает в ракетке:

> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3

Очевидно, я что-то упускаю ... что именно?

Ответы [ 2 ]

12 голосов
/ 08 марта 2012

Краткий ответ: вы не должны использовать полный язык "#lang racket". Языки обучения исключают потенциально запутанные расширенные возможности языка, с которым вы сталкиваетесь.

В этом случае ваше определение интерпретируется как функция с именем f с необязательным аргументом с именем quote, значением по умолчанию которого является 'x'.

Установите уровень языка Начинающий студент, и вы получите гораздо более разумный ответ.

0 голосов
/ 08 марта 2012

Эта строка не работает для меня в Racket: (define (f 'x) x). Сообщение об ошибке: define: not an identifier for procedure argument in: (quote x).

Какой язык вы используете? Вы пытались запустить вышеуказанную строку в окне взаимодействия?

...