> 1 <

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

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#3930   2011-02-13 20:04 GMT+3 часа(ов)      
Добрый День!
(define-syntax !
(syntax-rules ()
((_ a)
a)
((_ a f1 b)
(f1 a b))
((_ a f1 b f2 ...)
(f1 a (! b f2 ...)))))


язык Racket
чтоб было быстрей используется так (! 1 + 2 + 3 и т.д.)
пытался сделать обычную запись типа 1 + 2 + 3 и т.д.

знаю, что не правильно считает запись с минусами и / т.е. (! 1 - 2 - 3) получается 2 ну и (! 1 / 2 / 3) тоже не то.

даже почти знаю где ошибка но не знаю как исправить.

хотелось бы услышать критику)

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3931   2011-02-13 20:33 GMT+3 часа(ов)      
(define-syntax old-!
(syntax-rules ()
((_ a)
'a)
((_ a f1 b)
'(f1 a b))
((_ a f1 b f2 ...)
`(f1 a ,(old-! b f2 ...)))))
 
(define-syntax test-!
(syntax-rules ()
((_ a)
'a)
((_ a f1 b)
'(f1 a b))
((_ a f1 b f2 ...)
(test-! (f1 a b) f2 ...))))
 
(define-syntax !
(syntax-rules ()
((_ a)
a)
((_ a f1 b)
(f1 a b))
((_ a f1 b f2 ...)
(! (f1 a b) f2 ...))))
 
> (old-! 1 - 2 - 3)
'(- 1 (- 2 3))
> (test-! 1 - 2 - 3)
'(- (- 1 2) 3)
> (! 1 - 2 - 3)
-4

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3932   2011-02-13 20:39 GMT+3 часа(ов)      
> хотелось бы услышать критику)
Слишком мало кода для конструктивной критики.

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#3933   2011-02-13 20:42 GMT+3 часа(ов)      
ааа ну да)) спс!

а запись ... просто позволяет добавлять произвольное кол-во аргументов?

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3934   2011-02-13 20:52 GMT+3 часа(ов)      
> а запись ... просто позволяет добавлять произвольное кол-во аргументов?
С точечной записью работать умеете? Если да, то запись
(_ a ...)
эквивалентна
(_ a . tail)
Поэтому можно переписать предыдущий макрос
(define-syntax !
(syntax-rules ()
((_ a)
a)
((_ a f1 b)
(f1 a b))
((_ a f1 b f2 . s-exp)
(! (f1 a b) f2 . s-exp))))
> (! 1 - 2 - 3)
-4

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#3937   2011-02-13 21:56 GMT+3 часа(ов)      
Цитата
С точечной записью работать умеете?

не работал. но читал. так что понял. спс
> 1 <


Онлайн :

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




Реклама на сайте: