Lisp: CHAR ни не объявляется, ни связывается

Вы не можете управление исходным кодом .user файлы, потому что это - конкретный пользователь. Это содержит название удаленной машины и других зависимых от пользователя вещей. Это - связанный файл vcproj.

.suo файл является связанным файлом sln, и он содержит "пользовательские опции решения" (проект (проекты) запуска, положение окон (что прикрепляется и где, что плавает), и т.д.)

Это - двоичный файл, и я не знаю, содержит ли он что-то "связанный пользователь".

В нашей компании мы не берем те файлы при управлении исходным кодом.

5
задан Tamas Czinege 27 July 2009 в 09:26
поделиться

2 ответа

Предупреждение означает, что char по какой-то причине не распознается как функция, как и должно (он сообщает, что символ не привязан, у него нет значения) .

Это могло иметь какое-то отношение к вашей реализации. Я запустил ваш код, используя Cc Mk в моем SBCL + Emacs / Slime (и в Clozure), и получил следующий отчет из компиляции в SBCL:

; in: DEFUN LAST-CHAR
;     (CHAR S (- (LENGTH S) 1))
; --> AREF 
; ==>
;   (SB-KERNEL:HAIRY-DATA-VECTOR-REF ARRAY SB-INT:INDEX)
; 
; note: unable to
;   optimize
; due to type uncertainty:
;   The first argument is a STRING, not a SIMPLE-STRING.
; 
; note: unable to
;   avoid runtime dispatch on array element type
; due to type uncertainty:
;   The first argument is a STRING, not a SIMPLE-ARRAY.

Попробуйте просто ввести

#'char 

в REPL, ответ должен быть что сообщается, что это функция

CL-USER> #'char
#<FUNCTION CHAR>

, но, возможно, этого нет в вашей реализации (я предполагаю, что это не так, учитывая предупреждение компилятора и тот факт, что код правильно компилируется в SBCL). Если это так, то это точка, в которой ваша реализация отходит от спецификации ANSI Common Lisp, потому что эта функция должна быть там.

5
ответ дан 14 December 2019 в 13:43
поделиться

Просто примечание относительно вашего отступа. Вот более традиционный отступ:

(defun last-char (s)
  "Get last character"
  (char s (- (length s) 1)))
1
ответ дан 14 December 2019 в 13:43
поделиться