Как следовать книге «Просто схема» с DrRacket - PullRequest
0 голосов
/ 15 мая 2018

Я бы хотел иметь возможность манипулировать предложениями, чтобы я мог использовать их в качестве входных данных и возвращать выходные данные на основе таких вещей, как отдельные буквы. Например, команда end-e, которая возвращает все слова, оканчивающиеся на «e»:

(ends-e '(only the good die young))
=> '(the die)

К сожалению, «е» - это строка, а «(только хорошие умирают молодые) - это предложение. Схема испытывает затруднения при понимании предложения как типа данных (потому что оно не одно). Как превратить предложение, которое пользователь вводит с кавычкой и скобками, во что-то, что я могу манипулировать и вернуть в том же формате предложения?

Эта книга: https://people.eecs.berkeley.edu/~bh/ssch8/higher.html#ft1 описывает некоторые функции, которые могут манипулировать предложениями и словами, но размещает сноску внизу, говоря: «Как и все процедуры в этой книге, которые имеют дело со словами и предложениями ... [the] процедуры в этой главе являются частью нашего расширения Схемы. "

Как мне получить эти расширения? Я посмотрел более позднюю главу, но мое понимание языка слишком элементарно, чтобы понять, как создавать эти процедуры самостоятельно.

Это сообщения об ошибках, которые я получаю, когда пытаюсь превратить '(h) в схему типа данных, которую можно понять.

Welcome to DrRacket, version 6.12 [3m].
Language: sicp, with debugging; memory limit: 128 MB.

> (symbol->string '(h))
. . symbol->string: contract violation
  expected: symbol?
  given: (mcons 'h '())
> (list->string '(h))
. . list->string: contract violation
  expected: (listof char?)
  given: '(h)
> (string->list '(h))
. . string->list: contract violation
  expected: string?
  given: (mcons 'h '())
> (string->symbol '(h))
. . string->symbol: contract violation
  expected: string?
  given: (mcons 'h '())
> 

Это означает, что я не могу спросить схему, если '(h) равно "h". Я даже не могу спросить, если '(h) равно' (h)!

> (eq? '(h) "h")
#f
> (eq? '(h) '(h))
#f
> 

1 Ответ

0 голосов
/ 16 мая 2018

В DrRacket есть язык совместимости Просто Схема

1.Из диспетчера пакетов

  1. Откройте диспетчер пакетов: в DrRacket выберите меню «Файл», затем выберите «Диспетчер пакетов ...».

  2. Во вкладке «Что я имею в виду» найдите текстовое поле и введите «просто схема» без кавычек.

  3. Нажмите кнопку «Установить».Это дает более плавный выход.Когда вы можете нажать «закрыть вывод», все будет готово, и вы можете закрыть окно.

  4. Проверьте это.Убедитесь, что DrRacket имеет «Определить язык из источника» в левом нижнем углу.Напишите следующую программу и нажмите RUN :

#lang simply-scheme
(se (butlast (bf "this"))
    "world")
; ==> (hi "world")

Я был немного смущен, так как SICP и Просто схема две разные книги .SICP имеет свои собственные определенные процедуры из своей книги, и в DrRacket есть специальный язык, #lang sicp, для этого варианта Схемы.Я написал аналогичный ответ о том, как установить sicp .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...