LINUX.ORG.RU

Вопрос по LISP

 ,


0

1

Приветствую!

Вот такой вопрос интересный.
Когда пишу так:

(loop for i from 0 to 2 collect `(i 1))
получается вот так:
((I 1) (I 1) (I 1))

Это правильно, но не совсем то, что мне надо.
Мне хочется сделать попарно: Вот так:
((i 1) (o 1) (i 1) (o 1))

Если написать вот так:
(loop for i from 0 to 2 collect `((i 1) (o 1)))

Получим:
(((I 1) (O 1)) ((I 1) (O 1)) ((I 1) (O 1)))

Что как бы не совсем то.

Как мне реализовать пары, описанные выше?
Спасибо.



Последнее исправление: solom (всего исправлений: 1)

ничего не понятно, какой список нужно получить?

"((i 1) (o 1) (i 1) (o 1))" - откуда вообще взялась эта «o»?

lazyklimm ★★★★★
()

А, ну и собственно

(iterate (for i from 1 to 2)
         (collect `(i 1))
         (collect `(o 1)))
так вроде должно работать

anonymous
()
Ответ на: комментарий от lazyklimm

Это пример,исходник намного сложнее

solom
() автор топика
Ответ на: комментарий от anonymous

Спасибо!!!! Но в моей версии сработало вот так: (loop for i from 1 to 2 collect `(i 1) collect `(o 1))

solom
() автор топика
(loop for i below 2 append '((i 1) (o 1)))
; ((I 1) (O 1) (I 1) (O 1))

(loop for i below 4
      for x in '#0=(i o . #0#)
      collect (list x 1))
; ((I 1) (O 1) (I 1) (O 1))

При чем тут макры?

korvin_ ★★★★★
()
(loop repeat 2 append '((i 1) (o 1)))
anonymous
()
Ответ на: комментарий от deterok

Макрос. Но для того, чтобы использовать loop, не нужно знать, что это макрос, да и про существование макросов вообще.

Кстати, в CL почти все конструкции языка являются макросами.

theNamelessOne ★★★★★
()
Ответ на: комментарий от solom

Макры при том, что подобная конструкция будет в них использоваться

Любая конструкция может использоваться в макрах и где угодно.

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

Совсем нет это зависит от макроса. Например внутри лупа произвольный код на общелиспе использовать нельзя.

anonymous
()
Ответ на: комментарий от anonymous

Совсем нет это зависит от макроса. Например внутри лупа произвольный код на общелиспе использовать нельзя.

Например?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

И?

Что и? Ты просил пример того, что не везде можно использовать обычный код на общелиспе - я привел пример.

(loop for i upto 2 do произвольный код на общелиспе)

Ну то есть понятно, что произвольный код можно писать _не везде_

anonymous
()
Ответ на: комментарий от solom

Макры при том, что подобная конструкция будет в них использоваться

- Вы что, кого-то изнасиловали?

- Нет, но инструмент имеется.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.