首页 > 解决方案 > 为什么是这样的 if 语句?

问题描述

问题是编写一个函数,该函数接受一个列表并将其划分为一个列表中大小相等的两个列表,并返回一个列表,其第一个元素是第一个列表,第二个元素是第二个列表。我有一个代码可以做到这一点,但它的某些方面我不明白。

(这是整个代码的一部分)

(define (split l)
  (define (arghelp want num call)
    (if (want num)
        num
        (num (error "No" num want call))))

为什么 if 语句没有谓词?我假设如果 want 参数等于 num 参数,那么代码将运行相同但它没有。

(如果有帮助,这是整个代码)

(define (split l)
  (define (arghelp want num call)
    (if (want num)
        num
        (num (error "No" num want call))))
  (define (take-help lst p)
    (arghelp integer? p take-help)
    (let next ((lst lst) (p p))
      (if (zero? p) '()
          (cons (car lst)
                (next (cdr lst) (- p 1))))))
  (define (drop-help lst p)
    (arghelp integer? p drop-help)
    (let next ((lst lst) (p p))
      (if (zero? p)
      lst
      (next (cdr lst) (- p 1)))))
  (let ((a (quotient (length l) 2)))
    (cons (take-help l a)
          (drop-help l a))))

标签: schemeracketr5rs

解决方案


为什么 if 语句没有谓词?

是的,它有一个谓词:

(define (arghelp want num call)
  (if (want num)

在上面的行中,want是一个作为参数接收的函数。当你打电话时arghelp,你是这样做的:

(arghelp integer? p take-help)

如果替换参数,则条件实际上变为:

(if (integer? num) ...

这就是您要查找的谓词!


推荐阅读