Назовите список в схеме - PullRequest
2 голосов
/ 03 апреля 2012

Я пытаюсь создать массив данных в Scheme, похожий на массив, и, поскольку мне нужно часто обращаться к нему (и изменять его!), Я хочу дать ему имя.Но из того, что я читал на разных сайтах с учебниками, похоже, что единственный способ назвать список для дальнейшего использования - это define.Это было бы хорошо, за исключением того, что, когда я инициализирую список с помощью define, это также выглядит так, что усложнять его изменение или добавление в указанный список.Например, кажется, что я не смог бы сделать просто (append wordlist (element)), мне бы понадобился какой-то способ!Взрыв.

В основном мои вопросы сводятся к: define моя единственная надежда на присвоение списка?И если да, то я застрял, прыгая через обручи, меняя свои элементы?Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Да, define - это способ для именования объектов в Схеме.Обычный список в Scheme не позволит вам изменять его элементы, потому что он неизменен - ​​это одна из тех вещей, с которыми вам придется научиться жить при работе с функциональной структурой данных.Конечно, вы можете добавлять к нему элементы или удалять элементы, но эти операции будут создавать новые списки, вы не сможете изменить элементы на месте.

Другой вариант заключается виспользуйте изменяемые списки вместо обычных списков, но если вы только учитесь использовать Scheme, лучше сначала придерживаться неизменяемых списков и узнать, как Scheme работает с неизменяемыми данными.

1 голос
/ 03 апреля 2012

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

Тогда, конечно, вам понадобится какая-то абстракция, чтобы развернуть функции внутри вашего "пакета".

См. SICP 2.5 Построение систем с общими операциями

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-18.html#%_sec_2.5

0 голосов
/ 03 апреля 2012

(append wordlist (element)) создает новый список. Возможно, вы захотите использовать set!, чтобы перенаправить ссылку на новый список, или define ссылку на новый список, используя имя того же символа.

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