2015-02-09 2 views
6

Я искал source code для раннего проекта AI Parry. Это сложно, потому что основная часть кода написана в MLISP, для которого не существует никакой рабочей реализации (что я знаю). Вместо этого я использовал спецификацию языка (MLISP Users' Manual и ранее MLISP Technical Report).Что означает ключевое слово ALSO в MLISP?

Одно любопытства, что я не в состоянии объяснить это IF-THEN-ELSE-ALSO конструкции, например:

IF !LAMBDANAME(B) THEN ERROR("NONLAMBDA INTO REACT2",B) ALSO RETURN NIL; 

Документации Я был в состоянии найти не говоря уже о ALSO положения для IF заявления, и я Я немного почесываю голову, чтобы понять, для чего это.

Одно из правдоподобных предложений, которые я видел, заключается в том, что он используется так, как предложение finally используется для обработки исключений в Java, то есть для запуска кода очистки независимо от того, как завершается IF. С другой стороны, это не объясняет заявления, которые, как представляется, никогда не поднимают исключения, например:

IF REACTTO='QUIT THEN REACTTO:=NIL ALSO TRACE_MEM:='NOSPECIALANAPH; 

Любые идеи?

+0

Всего предположение, но, возможно, это просто кусок синтаксический сахар для запуска второго утверждения после первого, в этот случай, ЕСЛИ ... ELSE? – Linuxios

ответ

7
IF e1 THEN a ALSO b ALSO c ELSE d ALSO e ALSO f 

Есть только

(COND (e1 a b c) (T d e f)) 

См MLISP Дэвида Canfield Смит, 1970.

+0

Так что 'a также b также c' по существу является сахаром для' (progn() a b c) '? –

+0

Я MLISP-неосведомленный - нужна 'progn' эта пустая форма? В CL я бы просто сказал «(progn a b c)». – khedron

+0

@khedron: нет, это только я небрежный и запутанный 'progn' с' prog'. –

Смежные вопросы