If statement / String comparison
我对
重点是在一年的学习中阅读,并在没有匹配时分别返回
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | (defun yearCode(name) (if ( = name"freshman") 1 (if ( = name"sophomore") 2 (if ( = name"junior") 3 (if ( = name"senior") 4 (0)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; main function ;;; ;;; input: year ;;; ;;; output: code corresponding to year ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun main (year) (interactive"sEnter your academic year:") ; read year (message"%d" (yearCode year))) ; display its code ;;; Tests... (main"junior") (yearCode"junior") |
我真的对elisp一无所知,所以我甚至在编译第一部分时也遇到了困难。有人能帮我正确地构造一个
编辑:我在错误的缓冲区中进行测试——代码使用if语句工作。
当您在Ruby中使用
1 2 3 4 5 6 | (defun yearCode (name) (cond ((string= name"freshman") 1) ((string= name"sophomore") 2) ((string= name"junior") 3) ((string= name"senior") 4))) |
不过,我不会这么写的。
1 2 3 4 5 6 | (defun yearCode (name) (cdr (assoc name '(("freshman" . 1) ("sophomore" . 2) ("junior" . 3) ("senior" . 4))))) |
有很多种平等,而
用最小的更改编写
1 2 3 4 5 6 | (defun yearCode (name) (cond ((string= name"freshman") 1) ((string= name"sophomore") 2) ((string= name"junior") 3) ((string= name"senior") 4) (0))) |
编辑添加:问题的原始版本结构非常不同,因此下面的解释不再适用…
您所写的代码与上面的代码的区别在于,在上面的代码中,
您的原始代码有4个不同的表达式,只有最后一个表达式的值被实际返回(最后一个
我建议你读一本介绍性的Lisp书,我最喜欢的是sicp,但是你可能应该去看看so的问题,寻找最好的介绍性书籍。
这将是使用if语句编写它的方法。if语句有一个条件部分,该部分为真或假。如果为真,则对第一部分进行评估。它实际上只能是一个句子,除非使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | (defun yearCode(name) (if (string= name"freshman") ; true or false? 1 ; if true, returns 1 ; Note that you can't really write anything else here. ; From here on, it is the first else part! (if (string= name"sophomore") ; if false, else part etc. 2 (if (string= name"junior") 3 (if (string= name"senior") 4))))) |
虽然这明确回答了你关于
在应用
1 2 3 4 5 6 7 8 9 10 11 | (defun yearCode(name) (if (string= name"freshman") ; true or false? (progn 1 ; if true, returns 1 (message"this is possible!")) (if (string= name"sophomore") ; if false, else part etc. 2 (if (string= name"junior") 3 (if (string= name"senior") 4))))) |