• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Life is Good.

            Enhance Tech and English
            隨筆 - 65, 文章 - 20, 評論 - 21, 引用 - 0
            數據加載中……

            How to use (nth …) Safely

            Danger of the (nth …) Function

             

            If not used carefully, this function can easily generate “bad argument” errors in our product. The purpose of this function is to return the “nth” index entry of a list. The syntax is (nth ix lst) where “ix” the index (zero-based) and “lst” is a non-nil list.

             

            So, if the “lst” is a four-element list such as (“apple” 3.14 (“banana” “grape”) “CR101”) then the nth function will return the following:

             

            (nth 0 lst) returns “apple”

            (nth 1 lst) returns 3.14

            (nth 2 lst) returns (“banana” “grape”)  - i.e. a sublist in the list

            (nth 3 lst) returns “CR101”

            (nth 4 lst) returns nil

            (nth 5 lst) returns nil

             

            BUT, if “lst” does not exist (i.e. “lst” is nil), then any of the above calls will trigger our product to fail with a “bad argument” message in the command window. You can simulate this by trying it at your command line. Type this (setq xx nil) [Enter] and then this (nth 0 xx) [Enter].

             Under some conditions, the “xx” list above comes through as undefined or nil. So, when the (nth …) function tries to return the 2nd element (index = 1) of this non-existent list, our product fails with a “bad argument” message.

             

            How to use (nth …) Safely

             

            Solution #1 – use (car lst), (cadr lst), (caddr lst) instead of (nth 0 lst), (nth 1 lst), (nth 2 lst) – these “ca*” functions extract the same information from the list but do not fail with a “bad argument” message if the lst does not exist. So, in the above example, (setq typeflag (cadr xx)) would return the same information as (setq typeflag (nth 1 xx)) BUT without the chance of failing if the list “xx” did not exist. So, (nth 1 xx) fails with “bad argument” but (cadr xx) returns safely with a returned value of nil.

             

            Solution #2 – add an error check prior to calling the (nth…) function. In the above example, do something like this:  (if xx (setq typeflag (nth 1 xx))). This expression will only execute the (nth…) function if “xx” is non-nil. If you really want to make sure that all is well, that xx is non-nil AND it is a “List”, you could do this:  (if (= (type xx) ‘LIST)(setq typeflag (nth 1 xx))). But, in general, the first example is probably sufficient.

            posted on 2008-07-31 14:57 Mike Song 閱讀(103) 評論(0)  編輯 收藏 引用

            久久精品国产精品亜洲毛片| av午夜福利一片免费看久久| 久久精品国产亚洲AV香蕉| 狠狠综合久久AV一区二区三区| 久久久久久国产精品美女| 四虎国产精品免费久久5151 | 九九热久久免费视频| 怡红院日本一道日本久久 | 2021国产精品久久精品| 国产精品无码久久久久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 精品少妇人妻av无码久久| 久久福利片| 狠狠狠色丁香婷婷综合久久俺| 欧美日韩成人精品久久久免费看| 国内精品久久久久影院优| 亚洲婷婷国产精品电影人久久| 国产一区二区三区久久| 色婷婷综合久久久中文字幕| 亚洲人成网站999久久久综合 | 香蕉久久夜色精品升级完成| 一本久久精品一区二区| 久久久久亚洲AV无码专区网站| AV色综合久久天堂AV色综合在| 国产偷久久久精品专区| 久久久久亚洲精品日久生情| 香蕉久久AⅤ一区二区三区| 国内精品久久久久久久久| 99久久精品国产一区二区三区| jizzjizz国产精品久久| 久久精品国产久精国产| 国产亚洲美女精品久久久久狼| 国产精品久久亚洲不卡动漫| 久久国产精品国产自线拍免费 | 久久婷婷色香五月综合激情| 亚洲午夜无码AV毛片久久| 综合久久精品色| 日韩久久久久久中文人妻| 国内精品久久久久伊人av| 久久精品成人国产午夜| 久久国产精品二国产精品|