2010-08-09 46 views
5

Po pierwsze, jestem nowicjuszem LISP.Czy można wdrożyć coroutines przy użyciu tylko prymitywów LISP?

To, co chcę uzyskać, to wspólna funkcja mikro-gwintowania. A to można uzyskać dzięki coroutine. Jak wiem, Scheme obsługuje coroutines za pośrednictwem kontynuacji. Jednak nie wszystkie wdrożenia Schematu mogą mieć kontynuację. Jeśli tak, czy mogę dodać funkcję kontynuacji tylko dla prymitywów LISP?

+0

O jakim rodzaju "LISP" mówisz? – Svante

+0

@Svante Mainly Scheme, ale prawdopodobnie każdy rodzaj LISP-a. Mówiłem o prymitywach LISP-a, które ma każdy LISP. Chcę rzucić wyzwanie, aby wykonać własną implementację, jeśli mógłbym :) – Eonil

+3

Ah. Cóż, myślałem, że możesz znaczyć jakiś starożytny dialekt, jeden od czasu, w którym ludzie wciąż pisali to we wszystkich stolicach. – Svante

Odpowiedz

5

Możesz. Rozdziały 5 i 6 z Essentials of Programming Languages pokazują, jak wdrożyć kontynuacje w Schemacie. W swojej książce On Lisp Paul Graham wyjaśnia, w jaki sposób implementować kontynuacje w Common Lisp (rozdziały 20-22).

+0

Te "kontynuacje" dla CL są względnie ograniczone, jak sądzę. –

+0

@Rainer Czy mogę wiedzieć o ograniczeniu? – Eonil

+1

@Eonil On Lisp zawiera implementację wielowątkowości w kontynuacji, więc w przypadku tej implementacji możliwe jest również współdziałanie. –