summaryrefslogtreecommitdiff
path: root/tutorial/cl/tutorial-implementation.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'tutorial/cl/tutorial-implementation.lisp')
-rw-r--r--tutorial/cl/tutorial-implementation.lisp41
1 files changed, 41 insertions, 0 deletions
diff --git a/tutorial/cl/tutorial-implementation.lisp b/tutorial/cl/tutorial-implementation.lisp
new file mode 100644
index 000000000..5c92fe405
--- /dev/null
+++ b/tutorial/cl/tutorial-implementation.lisp
@@ -0,0 +1,41 @@
+(in-package #:tutorial-implementation)
+
+;;;; Licensed under the Apache License, Version 2.0 (the "License");
+;;;; you may not use this file except in compliance with the License.
+;;;; You may obtain a copy of the License at
+;;;;
+;;;; http://www.apache.org/licenses/LICENSE-2.0
+;;;;
+;;;; Unless required by applicable law or agreed to in writing, software
+;;;; distributed under the License is distributed on an "AS IS" BASIS,
+;;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;;;; See the License for the specific language governing permissions and
+;;;; limitations under the License.
+
+(defun tutorial.calculator-implementation:ping ()
+ (format t "ping()~%"))
+
+(defun tutorial.calculator-implementation:add (num1 num2)
+ (format t "add(~a, ~a)~%" num1 num2)
+ (+ num1 num2))
+
+(defun tutorial.calculator-implementation:calculate (logid work)
+ (format t "calculate(~a, ~a)~%" logid work)
+ (handler-case
+ (let* ((num1 (tutorial:work-num1 work))
+ (num2 (tutorial:work-num2 work))
+ (op (tutorial:work-op work))
+ (result
+ (cond
+ ((= op tutorial:operation.add) (+ num1 num2))
+ ((= op tutorial:operation.subtract) (- num1 num2))
+ ((= op tutorial:operation.multiply) (* num1 num2))
+ ((= op tutorial:operation.divide) (/ num1 num2)))))
+ (shared-implementation::add-log logid result)
+ result)
+ (division-by-zero () (error 'tutorial:invalidoperation
+ :why "Division by zero."
+ :what-op (tutorial:work-op work)))))
+
+(defun tutorial.calculator-implementation:zip ()
+ (format t "zip()~%"))