Проблема заключается в следующем, она найдена в http://www.cs.indiana.edu/classes/b551- утечка/scheme_practice.html .
Определение проблемы: Напишите функцию cxr, которая является обобщением операторов car/cdr, представленных в схеме. cxr должен принимать строку «a» и «d», представляющую последовательность выполняемых операций car и cdr, и возвращать функцию, способную выполнить эту последовательность.
Таким образом, (cxr "ad") эквивалентно функции cadr.
((cxr "ad") '(i ii iii iv v vi vii)) ==> ii
(define sixth (cxr "addddd"))
(sixth '(i ii iii iv v vi vii)) ==> vi
Моя попытка: Я преобразовал cxr "ad" в строку "cadr" с помощью добавления строки. [Это просто] .. Теперь, как я могу связать "кадр" с кадром... Я пробовал строку->символ, но вывод заключен в кавычки и откуда функция не выполняется. -- так есть ли способ раскавычить ?!
Реальный вопрос: как решить эту проблему?
ОБНОВЛЕНИЕ: Спасибо всем за эти ответы. Все они верны, и я решил это таким образом, прежде чем даже опубликовать вопрос. В основном я искал способ вызвать caddddr, когда ввод (cxr adddd) ... Все сделали ту же функциональность, что и caddddr, но на самом деле не вызывали cadddr.
То есть, как сделать функции с тем же типом именования, что и cadr caddr и т.д.
ОБНОВЛЕНИЕ: (я думаю, что нашел решение, и оно заключается в следующем, но, как сказано ниже, оно не работает для более длинных d):
(define cxr
(lambda (ad l)
( (eval (string->symbol (string-append "c" ad "r"))) l)
)
)