• <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, 評(píng)論 - 21, 引用 - 0
            數(shù)據(jù)加載中……

            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 閱讀(99) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久亚洲熟女cc98cm| 久久久久九九精品影院| 国产精品99久久久精品无码| 久久久久久国产精品美女| 国产精品免费久久久久久久久| 久久91精品国产91久久户| 精品少妇人妻av无码久久| 狠狠狠色丁香婷婷综合久久俺| 一本久道久久综合狠狠爱| 久久精品天天中文字幕人妻| 东京热TOKYO综合久久精品 | 少妇内射兰兰久久| 亚洲国产精品无码久久98| 99国产欧美精品久久久蜜芽| 久久精品国产影库免费看| 久久噜噜久久久精品66| 中文字幕亚洲综合久久菠萝蜜| 久久久亚洲裙底偷窥综合| 久久亚洲精品国产精品| 亚洲国产精品久久久久婷婷老年| 久久精品一区二区三区中文字幕| 一级a性色生活片久久无少妇一级婬片免费放 | 久久发布国产伦子伦精品| 26uuu久久五月天| 麻豆精品久久久久久久99蜜桃| 欧美丰满熟妇BBB久久久| 国产精品免费久久久久电影网| 久久只有这精品99| 久久精品国产亚洲欧美| 2020国产成人久久精品| 国产亚洲欧美成人久久片| 久久久国产亚洲精品| 热re99久久精品国产99热| 久久久久久久波多野结衣高潮 | 免费观看久久精彩视频| 亚洲国产一成久久精品国产成人综合| 无码超乳爆乳中文字幕久久 | 久久AV无码精品人妻糸列| 免费精品99久久国产综合精品| 欧美伊人久久大香线蕉综合| 久久综合九色综合欧美狠狠|