销毁方案中的记录

时间:2018-12-08 13:10:20

标签: scheme lisp

我正在学习Scheme,来自C / C ++背景。我已经习惯于将相关值放到结构中,并且我发现Scheme的记录对此非常有效。

如果发现自己经常这样做以避免在功能体中出现视觉噪声:

(define (f pt z)
  (let*
    ((x (point-x pt))
     (y (point-y pt))
     (d (* x y z)))
   ...)

ptpoint记录的地方。有没有更短的方法来绑定/破坏记录的字段?理想情况下,这可以在let绑定内工作,但是我无法找到一种方法来编写可以完成此操作的宏,或者甚至可以做到这一点。

3 个答案:

答案 0 :(得分:4)

在球拍中,我们可以使用match来破坏记录的字段。如果这是一种更好的方法,则值得商......

//  error handling (reject/catch) omitted for brevity.

function fn1 (val) {
  return new Promise(resolve => {
    resolve('foo ' + val)
  })
}

function fn2 (val) {
  return new Promise(resolve => {
    resolve('bar ' + val)
  })
}

Promise.all([fn1(1), fn2(2)])
  .then(result => console.log(result))

答案 1 :(得分:1)

如果您使用的是chez方案,建议在这里使用Alex Shinn的比赛端口:https://github.com/fedeinthemix/chez-matchable。您可以将它与chez的r6rs记录进行匹配(在许多其他事情中)。

答案 2 :(得分:0)

自从我问了这个问题以来,我在Scheme宏上变得更好,并且我目前正在使用此宏:

## so far I know how to apply the histogram equalization to the entire image    

import cv2
import numpy as np
from matplotlib import pyplot as plt

## load image
img = cv2.imread('/home/pi/Downloads/bear.bmp',0)

## equalize
equ = cv2.equalizeHist(img)

plt.subplot(111),plt.imshow(equ, cmap = "gray"),plt.title('Equalized')
plt.xticks([]), plt.yticks([])
plt.show()

哪个语法如下:

(define-syntax derecord
    (syntax-rules ()
      ((_ record ([name record-accessor] ...) body-forms ...)
       (let ([name (record-accessor record)] ...)
     body-forms ...))))

这只比在let中手动完成要好一些,但是我想我会把它发布给像我这样的其他初学者。