我正在尝试为Scheme中的类构建一个简单的4函数计算器,这就是我想出的。这个函数需要三个变量。不管我尝试什么,if语句都不起作用,并且总是变成false。
我尝试用诸如“ plus”,“ minus”等字符串替换符号,但是我一直得到相同的结果。
(define calculator
(lambda (val1 operator val2)
if (equal? operator +)
(+ val1 val2)
(if (equal? operator -)
(- val1 val2)
(if (equal? operator *)
(* val1 val2)
(if (equal? operator /)
(/ val1 val2)
'())))))
(display (calculator 1 + 2))
所有语句的计算结果均为false,我得到了最后一个if语句中的else语句。
答案 0 :(得分:0)
您在第一个if
表格的周围缺少括号。应该是这样的:
(define calculator
(lambda (val1 operator val2)
(if (equal? operator +)
(+ val1 val2)
(if (equal? operator -)
(- val1 val2)
(if (equal? operator *)
(* val1 val2)
(if (equal? operator /)
(/ val1 val2)
'()))))))
如果没有,则将if
视为一个变量,然后它将评估(equal? operator +)
,(+ val1 val2)
(if ..)
,然后始终评估'()
,它将始终最终作为返回值。
当您使用if
elseif
类型的果酱时,最好使用cond
:
(define calculator
(lambda (val1 operator val2)
(cond ((equal? operator +) (+ val1 val2))
((equal? operator -) (- val1 val2))
((equal? operator *) (* val1 val2))
((equal? operator /) (/ val1 val2))
(else '()))
也知道可以这样写:
(define (calculator val1 operator val2)
(operator val1 val2))