(defun find-second-smallest-number (list)
(loop for n in list
for second = n then (if (< first n second) n second)
minimize n into first
finally (return (if (> second first) second nil))))
(defun test (fn)
(loop for (arg expected) in '(((4 5 1 7 1 2 8 9 2 7) 2)
((2 2 2 2 2 2 2 2 2 2) nil)
((1) nil)
((2 1) 2)
((1 2) 2)
((3 2 1) 2)
(() nil))
for result = (handler-case (funcall fn arg)
(error (cond) cond))
do (format t "~:[❌~;✓~] ~:S → ~S~%"
(eql result expected)
arg
result)))
(test #'find-second-smallest-number)
KGRlZnVuIGZpbmQtc2Vjb25kLXNtYWxsZXN0LW51bWJlciAobGlzdCkKICAobG9vcCBmb3IgbiBpbiBsaXN0CiAgICAgICAgZm9yIHNlY29uZCA9IG4gdGhlbiAoaWYgKDwgZmlyc3QgbiBzZWNvbmQpIG4gc2Vjb25kKQogICAgICAgIG1pbmltaXplIG4gaW50byBmaXJzdAogICAgICAgIGZpbmFsbHkgKHJldHVybiAoaWYgKD4gc2Vjb25kIGZpcnN0KSBzZWNvbmQgbmlsKSkpKQoKKGRlZnVuIHRlc3QgKGZuKQogIChsb29wIGZvciAoYXJnIGV4cGVjdGVkKSBpbiAnKCgoNCA1IDEgNyAxIDIgOCA5IDIgNykgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDIgMiAyIDIgMiAyIDIgMiAyIDIpIG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDEpIG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDIgMSkgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDEgMikgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDMgMiAxKSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKSBuaWwpKQogICAgICAgIGZvciByZXN1bHQgPSAoaGFuZGxlci1jYXNlIChmdW5jYWxsIGZuIGFyZykKICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgKGNvbmQpIGNvbmQpKQogICAgICAgIGRvIChmb3JtYXQgdCAifjpb4p2MfjvinJN+XSB+OlMg4oaSIH5TfiUiCiAgICAgICAgICAgICAgICAgICAoZXFsIHJlc3VsdCBleHBlY3RlZCkKICAgICAgICAgICAgICAgICAgIGFyZwogICAgICAgICAgICAgICAgICAgcmVzdWx0KSkpCgoodGVzdCAjJ2ZpbmQtc2Vjb25kLXNtYWxsZXN0LW51bWJlcikK