هل هناك أي وظيفة اللثغة المشتركة عودة 3 القيم؟

StackOverflow https://stackoverflow.com/questions/497229

  •  20-08-2019
  •  | 
  •  

سؤال

هل يعود أي وظيفة اللثغة المشتركة (المضمن) أكثر من 2 القيم؟ أنا أعرف الكثير التي ترجع 2، ولكن لا أستطيع أن أفكر واحد وترجع 3.

و(رأيت تعليق هنا في العودة أكثر من 2 القيم، وحاول التفكير في الحالة التي يكون فيها فعل CL هذا، ولكن لا يمكن).

هل كانت مفيدة؟

المحلول

وهناك وظيفة جت-setf التوسع. تقوم بإرجاع 5 القيم.

نصائح أخرى

نعم، وجود مثل هذه الوظائف. ستجد هنا لائحة كاملة من وظائف في حزمة مشتركة، اللثغة التي ترجع بالضبط ثلاث قيم، وفقا لما أعلن في التعليمات البرمجية المصدر SBCL:

COMPILE                                 required: 3, optional: 0, rest?: NIL
INTEGER-DECODE-FLOAT                    required: 3, optional: 0, rest?: NIL
COMPILE-FILE                            required: 3, optional: 0, rest?: NIL
GET-PROPERTIES                          required: 3, optional: 0, rest?: NIL
FUNCTION-LAMBDA-EXPRESSION              required: 3, optional: 0, rest?: NIL
DECODE-FLOAT                            required: 3, optional: 0, rest?: NIL
RENAME-FILE                             required: 3, optional: 0, rest?: NIL

وبالإضافة إلى ذلك، المهام التالية بإرجاع عدد ثابت من القيم أكبر من ثلاثة:

DECODE-UNIVERSAL-TIME                   required: 9, optional: 0, rest?: NIL
GET-DECODED-TIME                        required: 9, optional: 0, rest?: NIL

وهذه الدالات بإرجاع عدد متغير من القيم، وبالتالي ربما أكثر من ثلاثة:

NO-APPLICABLE-METHOD                    required: 0, optional: 0, rest?: T
NO-NEXT-METHOD                          required: 0, optional: 0, rest?: T
VALUES                                  required: 0, optional: 0, rest?: T

(I've omitted some functions from this list where SBCL does not declare
a values type explicitly.  get-setf-expansion is one of them.)

وتفسيرات من الأعمدة: required هو الحد الأدنى لعدد من القيم مقابل هذه الوظائف، optional عدد محدد من القيم المرجعة التي يعتقد SBCL قد تكون أو لا يمكن إرجاعها، rest? يشير إلى أنه من المتوقع عدد متغير من القيم. (فقط macroexpand وmacroexpand-1 فعلا استخدام واختياري، لا تسألني لماذا).

وللمتعة فقط، وهنا هو رمز مصدر اعتدت على الخروج مع هذه الجداول:

(do-external-symbols (sym :common-lisp)                                         
  (when (fboundp sym)                                                           
    (multiple-value-bind (required optional rest)                               
        (let ((fun-type (sb-int:info :function :type sym)))                     
          (etypecase fun-type                                                   
            (sb-kernel:fun-type                                                 
             (let ((returns                                                     
                    (sb-kernel:fun-type-returns fun-type)))                     
               (etypecase returns                                               
                 (sb-kernel:values-type                                         
                  (values (length (sb-kernel:values-type-required returns))     
                          (length (sb-kernel:values-type-optional returns))     
                          (sb-kernel:values-type-rest returns)))                
                 (sb-kernel:named-type                                          
                  (if (sb-kernel:named-type-name returns)                       
                      (values 1 0 t)                                          
                      (values 0 0 nil))))))                                     
            (t                                                                  
             (values 0 0 t))))                                                  
      (format t                                                                 
              "~A~40Trequired: ~D, optional: ~D, rest?: ~A~%"                   
              sym                                                               
              required optional rest))))

فك-التوقيت العالمي يعود تسعة القيم.

قيمنا و <لأ href = "HTTP: //www.lispworks.com/documentation/HyperSpec/Body/f_vals_l.htm#values-list "يختلط =" نوفولو noreferrer "> القيم-LIST وغيرها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top