> 1 <

Автор Сообщение

polubencev

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#6479   2012-08-22 12:40 GMT+3 часа(ов)      
Подскажите пожалуйста, что тут можно придумать:
===================================================
Напишите функцию, осуществляющую замену элементов списка y на соот-ветствующие элементы списка x в списке w, например,
y=(a b), x=(1 2), w=((a b) a (c (a (a d)))) -> ((1 2) 1 (c (1 (1 d))))
==================================================
.....???

Aoloa

Members


Статус

37 сообщений

Где: Ukraine
Род занятий:
Возраст:

#6480   2012-08-22 17:19 GMT+3 часа(ов)      
Тут не объяснили, на каком именно Лиспе надо, так что вот реализация на Scheme:

;; Это в начале файла; в разных реализациях могут быть разные способы
;; подключать модули; этот точно работает в Kawa Scheme и Chicken Scheme
(require 'srfi-69) ;поддержка хэш-таблиц
 
;; В Racket'е вместо этого напишите (без знаков ;; в начале строки):
;; #lang racket
;; (require srfi/69) ;поддержка хэш-таблиц
 
;; Сама функция:
(define (replace-every x y w)
(let ((ht (make-hash-table)))
(for-each (lambda (a b) (hash-table-set! ht a b)) x y)
(let replace-list ((list w))
(map (lambda (el) (if (list? el)
(replace-list el)
(hash-table-ref/default ht el el)))
list))))
 
;; Пример использования:
(replace-every '(a b) '(1 2) '((a b) a (c (a (a d)))))
;; => ((1 2) 1 (c (1 (1 d))))


Если надо, могу объяснить, что что делает. Common Lisp’а не знаю (всё время думаю, что надо бы поучить, но когда вижу размер Hyperspec’а, весь энтузиазм пропадает…), но, по идее, там всё должно быть похоже.
With iTeX* your entire life can be encapsulated into a dynamic hyperdocument, downloadable by anybody you designate (Donald E. Knuth, An Earthshaking Announcement)

vilkas

Members


Статус

3 сообщений

Где: Russia
Род занятий:
Возраст:

#6705   2012-10-28 14:05 GMT+3 часа(ов)      
А можно эту же задачу только на AutoLisp

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#6706   2012-10-28 16:00 GMT+3 часа(ов)      
Например,
(defun F (L X Y)
(if L
(cons
(if (member (car L) X)
(cdr (assoc (car L) (mapcar 'cons X Y)))
(if (atom (car L))
(car L)
(F (car L) X Y)))
(F (cdr L) X Y))))
> 1 <


Онлайн :

0 пользователь(ей), 45 гость(ей) :