scheme - 为什么是这样的 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))))
解决方案
为什么 if 语句没有谓词?
是的,它有一个谓词:
(define (arghelp want num call)
(if (want num)
在上面的行中,want
是一个作为参数接收的函数。当你打电话时arghelp
,你是这样做的:
(arghelp integer? p take-help)
如果替换参数,则条件实际上变为:
(if (integer? num) ...
这就是您要查找的谓词!
推荐阅读
- javascript - 即使满足条件,重定向似乎也没有做任何事情(反应)
- javascript - Vue 3 组合 API 去抖动功能
- algorithm - 是什么让这棵红/黑树变得沉重,它是否正确?
- java - 如何从数组中删除元素而不获取:ArrayIndexOutOfBoundsException?
- flutter - 如何定位图标而不溢出?我尝试通过添加填充,通过灵活包装小部件,但到目前为止没有运气
- android - 应用于背景按钮时,边框背景变为纯色
- java - IntelliJ 中的 Web.xml 映射 servlet 不起作用
- c# - 如何在 .Net 核心项目中使用 C# Web Api 阅读 pdf、替换其文本和发送邮件
- algorithm - 使用特征方程求解递归
- postgresql - top 语句的 PostgreSQL 子语句之间的数据一致性如何保证?